gpt4 book ai didi

c# - 根据每个元素中的数字对列表进行排序

转载 作者:行者123 更新时间:2023-12-02 18:07:47 32 4
gpt4 key购买 nike

几天前我尝试解决一个问题,并且在SO的帮助下几乎解决了。不幸的是陷入了无法解决的境地。场景如下:

输入:

[7, "aaa", "a", "cccccccccc", 5]

输出:

["a", "aaa", 5, 7, "cccccccccc"]

因此您可以看到,根据元素中字母的数量,应该对数组进行排序。如果是数字,也应该排序。在某一时刻,以下代码有效:

//Dynamic list where we can have string and integers
List<dynamic> aLst = new List<dynamic>();
aLst.Add(7);
aLst.Add("aaa");
aLst.Add("aa");
aLst.Add("cccc");
aLst.Add("a");
aLst.Add(2);
aLst.Add(5);
aLst.Add("cccccc");

int val;

//What I did here, converted all items into string

//Checks if the list contains string
var letters = aLst.Where(i => !int.TryParse(i.ToString(), out val)).OrderBy(i => i.Length).ToList();

//Checks if the list contains number
var numbers = aLst.Where(i => int.TryParse(i.ToString(), out val)).OrderBy(i => int.Parse(i.ToString())).ToList();

//Finally from the number result set, taking the numbers to get their indexes and set them into the list accordingly
foreach (var number in numbers)
{
//Checks number index
var index = int.Parse(number.ToString());

if (letters.Count() >= index)
{
letters.Insert(index, number); //Assign index to numbers
}
else
{
letters.Insert(number);
}
}

foreach(var value in letters)
{
Console.WriteLine(value);
}

上面的代码得到了我预期的结果。但是当输入如下时,它返回不同的结果集,我无法相应地设置:

 List<dynamic> aLst = new List<dynamic>();
aLst.Add(7);
aLst.Add("aaa");
aLst.Add("aa");
aLst.Add("cccc");
aLst.Add("a");
aLst.Add(2);
aLst.Add(10);
aLst.Add(5);
aLst.Add("cccccc");
aLst.Add("cccccccccccc");

我得到的结果:

["a", 2, "aa", "aaa", 5, "cccc", 7, "cccccc", "cccccccccccc", 10]

预期输出:

 ["a", 2, "aa", "aaa", "cccc", 5, "cccccc", 7, 10, "cccccccccccc"]

我在这里做错了什么或者错过了什么吗?任何想法将不胜感激。

代码片段:Sort Array Elements

最佳答案

这里的关键是检查对象的类型。如果 是字符串,则使用该字符串的长度作为订单,否则假设它是一个 int 并使用该值本身作为订单。

如果对象列表中有其他内容,例如某个随机类的实例,这将引发异常。

var list = new List<object> { 7, "aaa", "a", "cccccccccc", 5 };

// this assumes the elements in the array above (which can be anything) are only strings or integer
var ordered = list.OrderBy(x => x is string str ? str.Length : (int)x).ToList();

// print array to see results
Console.WriteLine(string.Join(",", ordered));

关于c# - 根据每个元素中的数字对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72907254/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com