首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建多维ImmutableArray?

如何创建多维ImmutableArray?
EN

Stack Overflow用户
提问于 2022-11-11 01:43:03
回答 1查看 51关注 0票数 1

看来,ImmutableArray上的MS文档只引用一维数组.我似乎可以将整个数组包装在ImmutableArray中,然后首先检索整个数组(在索引0处),然后在例如i,j处获取特定的值。

代码语言:javascript
复制
ImmutableArray<T[,]> arr = ImmutableArray.Create<TVal[,]>(oneDimArray);
T value = arr[0][i, j];

对我来说,多维数组似乎是一个共同的需求,而且必须有更好的方法。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-11 07:06:10

我同意jmcilhinney的评论,即多维数组很少需要,但这也许只是我作为后端和企业开发人员几十年后的有限经验。也许还有其他领域(游戏开发?)他们更需要的地方..。

也就是说,您通常可以使用锯齿阵列而不是多维数组。这在ImmutableArray<T>中也是可能的,尽管不一定特别容易使用。

举个例子,下面是如何初始化具有默认值的n×m不可变锯齿数组:

代码语言:javascript
复制
public static ImmutableArray<ImmutableArray<T>> Initialize<T>(int n, int m, T initialValue)
{
    var inner = Enumerable.Range(1, m).Select(_ => initialValue).ToImmutableArray();
    return Enumerable.Range(1, n).Select(_ => inner).ToImmutableArray();
}

下面是一个如何使用默认值"foo"初始化2×3数组的示例

代码语言:javascript
复制
var arr1 = Jagged.Initialize(2, 3, "foo");

其中的“改变”价值观充其量只能说是尴尬的:

代码语言:javascript
复制
// Change value at (0, 1)
var arr2 = arr1.Select(
    (a, i) => a.Select(
        (s, j) => i == 0 && j == 1 ? "bar" : s).ToImmutableArray()).ToImmutableArray();

但是,根据您需要它的目的,您可以编写帮助方法来使这种预测更容易。

由于锯齿数组是不可变的,上面的表达式不会更改原始数组arr1,而是返回一个新的锯齿数组arr2

另一方面,数据检索很容易:

代码语言:javascript
复制
// Retrieve value at (0, 1)
string bar = arr2[0][1];

正如预期的那样,bar具有"bar"值。

我经常在C#中使用不变的数据结构,但通常我只使用IEnumerable<T>。您可能已经注意到,上面的投影无论如何都会大量使用LINQ,所以除非您有大量的数据,否则不清楚为什么需要像ImmutableArray这样的东西,锯齿形的或者不像.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74397196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档