【发布时间】:2015-08-17 02:28:31
【问题描述】:
这是我在文件中的输入存储:
50|Carbon|Mercury|M:4;C:40;A:1
90|Oxygen|Mars|M:10;C:20;A:00
90|Serium|Jupiter|M:3;C:16;A:45
85|Hydrogen|Saturn|M:33;C:00;A:3
这里50,90,90,85表示权重,M,C,A表示每个元素中的比例。 p>
现在我想显示每个元素(即碳、氧等)从最高到最低,如果有多个具有相同权重的元素,将它们分组到一个单个权重并按按行星的字母顺序(火星、木星)然后元素(碳、氧等)对它们进行排序
预期输出:
1)90
Serium;Jupiter (sorted alphabetically by planet name).
compounds:M:3;C:16;A:45
Oxygen;Mars
compounds:M:10;C:20;A:00
2)85
Hydrogen;Saturn
M:33;C:00;A:3
3)50
Carbon;Mercury
M:4;C:40;A:1
这就是我的做法:
public class Planets
{
public int Number { get; set; } //This field points to first cell of every row.output 50,90,90,85
public string name { get; set; } //This field points to Second cell of every row.output Hallogen,Oxygen,Hydrogen
public string object { get; set; } ////This field points to third cell of every row.output Mercury,Mars,Saturn
public List<proportion> proportion { get; set; } //This will store all proportions with respect to planet object.
//for Hallogen it will store 4,40,1.Just store number.ignore M,C,A initials.
//for oxygen it will store 10,20,00.Just store number.ignore M,C,A initials.
}
public class proportion
{
public int Number { get; set; }
}
List<Planets> Planets = new List<Planets>();
using (StreamReader sr = new StreamReader(args[0]))
{
String line;
while ((line = sr.ReadLine()) != null)
{
Planets planet = new Planets();
String[] parts = line.Split('|');
planet.Number = Convert.ToInt32(parts[0]);
planet.name = parts[1];
planet.obj = parts[2];
String[] smallerParts = parts[3].Split(';');
planet.proportion = new List<proportion>();
foreach (var item in smallerParts)
{
proportion prop = new proportion();
prop.Number =
Convert.ToInt32(item.Split(':')[1]);
planet.proportion.Add(prop);
}
Planets.Add(planet);
}
}
var data = Planets.OrderByDescending(t => t.Number).ToList();//Highest to lowest.
foreach (var item in data)
{
//What to do for same elements
}
我可以成功地在我的行星列表对象中添加所有 4 行,如下所示:
Planets[0]:
{
Number:50
name: Carbon
object:Mercury
proportion[0]:
{
Number:4
},
proportion[1]:
{
Number:40
},
proportion[2]:
{
Number:1
}
}
Etc.......
我遇到的唯一问题是 显示相同数字的重量(预期输出 1)并按字母顺序按行星(火星,木星)排序,然后按元素(碳、氧等)
【问题讨论】:
-
这是显示数据还是存储数据?那么重量相同的行星应该一起存储在一个对象中,还是应该以正确的顺序显示任何给定数量的行星对象?如果是后者,您目前的显示方式如何,请提供代码,我将研究如何解决您的显示顺序问题。
-
@MeAndSomeRandoms:这只是显示数据而不是存储数据。具有相同权重的行星应合并为一个以显示火星和木星都具有相同的权重,因此我需要将它们显示在到 1 个行星,没有不同
-
那么您是否想将所有具有相同权重的行星封装在另一个数据结构中,以便您知道在该数据结构内部都是按正确顺序具有相同权重的所有行星。或者你想在显示完整的行星列表时进行排序逻辑。我要问的是,重量相同的行星是否应该存储在一起,以便您可以按正确的顺序显示它们,或者只要显示逻辑正确排序它们,它们的存储方式无关紧要。两者都是可能的。
-
一个简单的groupby体重就可以帮到你了,你用过吗
-
Mybe "ThenBy" 可以帮助您通过在主要属性之后按次要属性排序来获得正确的订单。示例代码为:exampleList.OrderBy(item => item.PrimaryProperty) .ThenBy(item=> item.SecondaryProperty).ToList();
标签: c# linq list sorting grouping