从另一个int []中的值构建int []

时间:2014-05-15 13:12:06

标签: c# arrays

我想要int[] building;根据另一个数组int[] info;动态实例化

info将保留int,范围为0-48

构建building数组..如果索引info的{​​{1}}数组中存在非零值,我想将该索引添加到ind阵列。

因此,如果building看起来像这样info,我希望构建显示{0, 12, 24, 48}另一个示例{1, 2, 3} - > {12, 0, 0, 48}

是否有一个整洁的衬里来完成这个?

我是怎么做的

{0, 3}

2 个答案:

答案 0 :(得分:4)

var building = info.Select((i, idx) => i == 0 ? -1 : idx)
                   .Where(i => i != -1)
                   .ToArray();

这将为您提供与现在相同的阵列。

以下是我用来证明它的整个控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        int[] info = new int[] { 12, 0, 0, 48 };
        List<int> indxs = new List<int>();
        for (int i = 0; i < info.Length; i++)
            if (info[i] > 0)
                indxs.Add(i);
        int[] building = indxs.ToArray();

        var newBuilding = info.Select((i, idx) => i == 0 ? -1 : idx)
            .Where(i => i != -1)
            .ToArray();
    }
}

buildingnewBuilding都为您提供相同的输出。

答案 1 :(得分:2)

var filtered = info.Select((x,i) => new { Value = x, Index = i})
                   .Where(x => x.Value > 0)
                   .ToArray();