我有一个清单说
List<string> someList = new List{"1-30","20-10","21-23","34-80"};
我需要拆分列表,所以我有以下值
{"1","20","21","34"};
我试过
someList
.SelectMany(n => n.Split('-')[0])
.ToList();
但它没有给我预期的结果。
更新
大家好,使用Select
解决了我的问题。其中一天,当你犯了愚蠢的错误
答案 0 :(得分:4)
你必须参加每个项目的第一部分,你可以在Substring
的帮助下做到(即将项目的值提升到-
) :
List<string> someList = new List{
"1-30", "20-100", "21-23", "34-80"};
var result = someList
.Select(item => item.Substring(0, item.IndexOf('-')))
.ToList(); // if you want a new list
如果您想要更改现有列表,只需实现一个循环:
for (int i = 0; i < someList.Count; ++i)
someList[i] = someList[i].Substring(0, someList[i].IndexOf('-'));
修改:当您放置SelectMany
而不是Select
时会发生什么。
SelectMany
想要IEnumerable<T>
作为结果,因为String
是IEnumerable<char>
,所以你有一个展平List<char>
:
['1', '2', '0', '2', '1', '3', '4']
请注意,每个字符串("1", "20", "21", "34"
)都被视为字符的集合(['1']; ['2', '0']; ['2', '1']; ['3', '4']
)
答案 1 :(得分:1)
您不需要使用selectMany,因为您不需要展平列表。使用Select将返回列表中的每个字符串
{“1-30”,“20-100”......等}
。使用SelectMany实际上会将字符串压缩成一系列字符,从而产生
{“1”,“ - ”,“3”,“0”......等}
所以你的分裂会导致错误的结果。
您只需选择列表中的每个项目,将项目拆分为“ - ”字符,然后从拆分中选择第一个结果。这应该会给你正确的结果。
List<string> someList = new List<string> { "1-30", "20-100", "21-23", "34-80" };
var splitString = someList.Select(x => x.Split('-').First()).ToList();
答案 2 :(得分:-1)
不像你想要的那么漂亮,但是它可以完成工作。
// Get a Handlebars instance
var hb = require("handlebars");
// Load a template
import fs = require('fs');
var template:string = fs.readFileSync('templates/template.handlebars','utf8');
// Compile said template
var compiled = hb.compile(template);
var html = compiled({});
// Write HTML file
fs.writeFileSync('compiled/template.html', html);