我有一个逗号分隔的字符串,用于指定索引。然后我还有一个逗号分隔的字符串,其中包含所有值。
EX:
string strIndexes = "5,6,8,15";
string strData = "ab*bc*dd*ff*aa*ss*ee*mm*jj*ii*waa*jo*us*ue*ed*ws*ra";
有没有办法分割字符串strData并只选择索引为5,6,8或15的元素。或者我必须首先拆分字符串然后循环遍历数组/列表然后再构建一个数组/列表,其中包含由字符串strIndexes定义的索引处的值(在此示例中为5,6,7,15)
由于
答案 0 :(得分:4)
这很简单:
var allValues = strData.Split('*')
var selected = strIndexes.Split(',')
.Select(x => int.Parse(x))
.Select(index => allValues[index]);
您可以从中创建一个列表(通过调用selected.ToList()
),或者您可以迭代它。
答案 1 :(得分:2)
这取决于字符串的长度。如果它相对较短(因此“Split”中的任何数组都很小)那么只需使用最简单的方法即可; Split
"*"
并选择您需要的元素。如果它非常大,那么可能就像迭代器块一样,以避免必须创建一个大型数组(但是......因为字符串已经很大,这可能不是一个巨大的开销)。 LINQ不是必然你最好的方法......
string[] data = strData.Split('*');
string[] result = Array.ConvertAll(strIndexes.Split(','),
key => data[int.Parse(key)]);
给出了["ss","ee","jj","ws"]
。
答案 2 :(得分:0)
在第一个字符串上调用Split(',');
并获得一个字符串数组,您可以通过索引访问该数组,并且可以在第二个数组上执行相同的操作。无需循环数组列表。