我想要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}
答案 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();
}
}
building
和newBuilding
都为您提供相同的输出。
答案 1 :(得分:2)
var filtered = info.Select((x,i) => new { Value = x, Index = i})
.Where(x => x.Value > 0)
.ToArray();