[英]Check If An Array of String Contains Number
我正在尝试完成一项任务并且非常接近完成。 这是场景 - 对于字符串数组,我需要根据每个元素中的字母数进行排序,如下所示:
string[] str = {"aaa", "cccc", "a"};
输出:
a, aaa, cccc //Sorted according to the number of letters
为了解决上述问题,请执行以下操作:
class Program
{
static void Main(string[] args)
{
int chkNumber;
string[] str = { "aaa", "cccc", "a",};
string result = "";
Array.Sort(str);
foreach (var i in str)
{
bool isNumber = int.TryParse(i, out chkNumber);
result = String.Join(", ", str.OrderBy(i => i.Length));
}
Console.WriteLine(result);
}
}
但我的要求是检查数组字符串中的数字并相应地进行排序。 如下所示:
string[] str = {"aaa", "cccc", "a", "2"};
由于它有一个数字,我尝试如下检查:
bool isNumber = int.TryParse(i, out chkNumber);
我的计划是获取号码并将其排序如下:
a, 2, aaa, cccc //As it's number 2 and places accordingly
我实际上也坚持如何使用字符串对该数字进行排序。 这样做是否有效或需要更改上述代码片段?
看起来您正在尝试按项目长度对数组进行排序,但任何数字项目除外,该项目应放在相应的索引中。
如果是这种情况,那么您可以首先获取所有非数字项,按长度对其进行排序,然后对数字项进行排序并将它们插入到相应的索引中。
需要考虑的事项:
如果数字大于数组中的项目数怎么办?
如果数字小于数组中的项目数怎么办(即负数)
如果有重复的数字怎么办?
public static string[] CustomSort(string[] input)
{
if (input == null || input.Length < 2) return input;
// Get all the non-number results sorted by length
int temp;
var result = input
.Where(i => !int.TryParse(i, out temp))
.OrderBy(i => i.Length)
.ToList();
// Get all the number results sorted by numeric value
var numbers = input
.Where(i => int.TryParse(i, out temp))
.OrderBy(i => int.Parse(i))
.ToList();
// Insert each number result into it's correct index
foreach(var number in numbers)
{
var index = int.Parse(number) - 1;
if (result.Count() >= index)
{
result.Insert(index, number.ToString());
}
else
{
result.Add(number.ToString());
}
}
return result.ToArray();
}
一个简单的解决方案是:
result = str.OrderBy(i => {
int num =0;
if(int.TryParse(i, out num)) return num ;
return i.Length;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.