[英]How to get [x] and [x+1] into a string then skip to [x+2]
輸入:1; 一種 ; 2; b; 3; c; 4; d; 5; e; 6; f
我得到的輸出是:1a; a2; b3; c4; d5; e6
我想要的輸出:1a; 2b; 3c; 4d; 5e; 6樓
我知道這是一件簡單的事情,但我似乎無法理解我的想法。
這是我的代碼:
for (int x = 0; x < coll.Count; x++)
{
if (x == 0)
{
line.Append(coll[x].ToString());
line.AppendLine(coll[x + 1].ToString());
}
else
{
if (x % 2 == 0)
{
}
else
{
try
{
line.Append(coll[x].ToString());
line.AppendLine(coll[x + 1].ToString());
x++;
textBox1.Text = line.ToString();
}
catch { }
}
}
如果要按原樣保留代碼(我假設某些情況將在空條件下進行),則只需將if (x % 2 == 0)
更改為if (x % 2 != 0)
(或者if (x % 2 == 1)
),因為當i = 0時,您的代碼當前正在追加到該行,然后是1,3,...,即所有奇數索引,而您需要追加到在所有偶數索引的行。
(不幸的是,我無法編輯您的問題,但是如果您只在開頭以for
開頭的行前留四個空格,則應正確設置其格式。)
如果您的列表像= [1,a,2,b,3,c,4,d,5,e,6,f]試試這個;
String line = "";
for(int i=0;i<list.size();i+2){
line += list.get(i)+list.get(i+1);
}
textBox1.Text = line;
編輯 ,如果你想要半冒號;
我編輯像
String line = "";
for(int i=0;i<list.size();i+2){
line += list.get(i)+list.get(i+1);
if(i != list.size() - 2){
line+=";";
}
}
textBox1.Text = line;
LINQ的一行代碼(但效率不高):
string[] source = { "1", "a", "2", "b", "3", "c" };
var result = source.Zip(source.Skip(1), (s1, s2) => s1 + s2)
.Where((s, i) => i % 2 == 0);
string[] arrayResult = result.ToArray();
string stringResultWithSeperator = string.Join(";", result);
另一個LINQy解決方案:
string input = "1;a;2;b;3;c;4;d;5;e;6;f";
var split = input.Split(';');
string rejoined = String.Join(";", Pairs(split));
Pairs
在哪里
IEnumerable<string> Pairs(IEnumerable<string> strings)
{
if (strings.Take(1).Count() == 0)
{
return new string[]{};
}
return new [] {String.Join("", strings.Take(2))}.Concat(Pairs(strings.Skip(2)));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.