我有两个独立的阵列(来自Json,但这并不重要)。它们排成一列......即arr1 [1]与arr2 [1]一起使用。
我想创建一个包含几个捕获的Test对象列表:
1) both arr1 and arr2 value can't be null
2) I'm only interested in indexes where the arr1 element is a multiple of 5
这是我到目前为止所做的:
class Test
{
public double d1;
public double d2;
}
class Program
{
static void Main(string[] args)
{
string[] arr1 = new string[] { "0", "2", "5", "7", "10", "11", null, "13", "15" };
string[] arr2 = new string[] { "11", "13", "56", "8", null, "44", "55", "66", "77" };
var v = arr1.Where(x => !String.IsNullOrEmpty(x)).Select(x => Double.Parse(x)).Where(x => (x % 5) == 0).Select((x, y) => new Test
{
d1 = x,
d2 = Double.Parse(arr2[y])
});
}
}
我不知道如何跳过arr2为空的那些并且对齐方式变得混乱。
答案 0 :(得分:4)
为了不弄乱对齐,你应该先.Zip
这两个数组。然后,如果我理解正确,那么应该跳过那些在任一数组中具有null
值的索引,因此您使用.Where
过滤掉那些,然后执行其余逻辑。
class Test
{
public double d1;
public double d2;
}
class Program
{
static void Main(string[] args)
{
string[] arr1 = new string[] { "0", "2", "5", "7", "10", "11", null, "13", "15" };
string[] arr2 = new string[] { "11", "13", "56", "8", null, "44", "55", "66", "77" };
var v = arr1
.Zip(arr2, (x, y) => new {x, y})
.Where(a => !string.IsNullOrEmpty(a.x) && !string.IsNullOrEmpty(a.y))
.Select(a => new Test { d1 = double.Parse(a.x), d2 = double.Parse(a.y) })
.Where(a => (a.d1 % 5) == 0);
// TODO, ready to enumerate over v.
}
}
答案 1 :(得分:0)
您可以按以下条件过滤条件。
class Program
{
static void Main(string[] args)
{
string[] arr1 = new string[] { "0", "2", "5", "7", "10", "11", null, "13", "15" };
string[] arr2 = new string[] { "11", "13", "56", "8", null, "44", "55", "66", "77" };
var v = arr1
.Zip(arr2, (x, y) => new { x, y })
.Where(a => !string.IsNullOrEmpty(a.x) && !string.IsNullOrEmpty(a.y))
.Select(a => new Test { d1 = double.Parse(a.x), d2 = double.Parse(a.y) })
.Where(a => (a.d1 % 5) == 0);
}
}