我有一个列表,我正在尝试连接当前和下一个。虽然我可以通过项目[索引] +项目[索引+1]轻松再次使用For循环执行此操作,但我想尝试使用LINQ。
我尝试使用Aggregate和Next运算符,但他们给了我整个Concatination。
if i have a List<string> ListSalary that has value like
"10000"
"20000"
"30000"
"40000"
I am looking for a output like
"10,000 - 20,000"
"20,000 - 30,000"
"30,000 - 40,000"
我的Forloop是
for (int index = 1; index < (ListSalary.Count - 1); index++) {
txtSalary.text = ListSalary[index].valueName.ToString() + " To " + ListSalary[index +1].valueName.ToString() ;
}
更新的问题:
这是给我一份清单。如果我想添加类似
的内容,我无法将其分配给Class属性listSalaryProperty.AddRange(ListSalary.select(g=> new KeyValuePair
{
key = // Here i want the 10,000 - 20,000
Value = // here it would be code value which already have
}
因此,如果我使用代码段
,请点击此处key = ListSalary.Zip(ListSalary.Skip(1), (a, b) => string.Format("{0} - {1}", a, b))
.ToList();
它会抛出将列表转换为字符串
的错误答案 0 :(得分:2)
使用LINQ,您可以在同一个集合上使用Zip
,但没有第一个元素,因此您可以访问当前和以前的值:
var res = ListSalary.Zip(ListSalary.Skip(1),
(a, b) => string.Format("{0} - {1}", a, b))
.ToList();
如果你想把它投射到KeyValuePair
,你可以写:
listSalaryProperty.AddRange(
ListSalary.Zip(ListSalary.Skip(1),
(a, b) => new KeyValuePair<string, object>(
string.Format("{0} - {1}", a, b),
/** your code **/)))
但是将object
更改为您的类型并添加您的代码以便当然计算价值。
答案 1 :(得分:0)
ListSalary.Take( ListSalary.Count - 1 )
.Select( (item, index) => string.Format( "{0} - {1}", item, ListSalary[index+1] ) )
答案 2 :(得分:0)
listSalaryProperty.AddRange(
ListSalary.Zip(ListSalary.Skip(1),
(a, b) => new
{
From = a,
To = b,
Text = string.format("{0} - {1}", a, b)
}
).Select(g => new KeyValuePair<string, YourValueType>(
g.Text,
/* value code here */
)));
KeyValuePair
是不可变的,因此您无法使用对象初始化语法来初始化Value
和Key
属性(它们是只读的)。你必须使用构造函数。将YourValueType
更改为与您的值匹配的正确类型。
您可以使用g.From
,g.To
和g.Text
(包含XXX - YYY
字符串)来生成Value
。