這是一個我必須承認的奇怪情況,但我試圖找到一個簡潔而優雅的方式將List<int>
轉換爲實際的int
。例如,如果我的列表包含條目1,2和3,那麼最終的整數將是123.我唯一想到的做法是將數組轉換爲字符串,然後解析字符串。將Int列表轉換爲Integer
任何提示?
這是一個我必須承認的奇怪情況,但我試圖找到一個簡潔而優雅的方式將List<int>
轉換爲實際的int
。例如,如果我的列表包含條目1,2和3,那麼最終的整數將是123.我唯一想到的做法是將數組轉換爲字符串,然後解析字符串。將Int列表轉換爲Integer
任何提示?
迭代列表,好像添加一個總和,但在每個階段將運行總數乘以10。
int total = 0;
foreach (int entry in list)
{
total = 10 * total + entry;
}
我覺得你的建議是相當不錯的,像這樣的工作:
var list = new List<int>() { 1, 2, 3, 4 };
var listAsString = String.Join("", list.ConvertAll(x => x.ToString()).ToArray());
Console.WriteLine(listAsString);
int result = Int32.Parse(listAsString);
Console.WriteLine(result);
dangit擊敗了我。 – Will 2010-06-14 11:57:46
List<int> l = new List<int>();
// add numbers
int result = int.Parse(string.Join(",", l).Replace(",", ""))
你必須照顧,如果列表足夠長,這樣得到的數字將超過int的限制儘管如此。
難道你不能只是'int.Parse(string.Join(「」,l))'? – Kezzer 2010-06-14 13:33:20
您可以通過在循環中添加所有數字來實現。不知道這是不是字符串分析,雖然速度快:
List<int> list = new List<int> {1, 2, 3};
int sum = 0;
int pow = list.Count - 1;
for (int i = 0; i <= pow; i++)
{
sum += list[i] * (int)Math.Pow(10,(pow-i));
}
此外,如果有一個長長的清單,你可能需要使用.NET 4.0的BigInteger的類,而不是一個int。
好吧只是爲了好玩(我不知道這是怎麼effecient是,可能不是很),你也可以做到這一點很容易地使用LINQ ...
第一整數列表轉換爲字符串列表,然後使用聚合函數來連接它們,然後在最後使用in32.TryParse來確保結果值在int範圍內。
string val = ints.Select(i=> i.ToString()).Aggregate((s1, s2) => s1 + s2);
說,你有一個像
var digits = [1, 2, 3 ...];
可枚舉的,那麼你可以這樣做:
// simplest and correct way; essentially the accepted answer but using LINQ
var number = digits.Aggregate((a, b) => a * 10 + b);
// string manipulation; works for sets like [10, 20, 30]
var number = int.Parse(string.Join("", digits));
// using `Select` instead of `Aggregate` but verbose; not very useful
var number = (int)digits.Select((d, i) => d * Math.Pow(10, digits.Count() - i - 1)).Sum();
當心,你的列表中的內容必須出示有效的int(即整數在-2,147,483,648到+2,147,483,647的範圍內)。 – Humberto 2010-06-14 11:42:33
另外,如果您的列表類似{100,1,0,2},應該發生什麼? – Humberto 2010-06-14 11:43:36
如果列表包含大於等於10的值,那麼規則是什麼?例如1,20,33,4會變成120334?如果是這樣,下面的「10的倍數」答案將失敗。 – 2010-06-14 11:43:48