第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

添加字段時的C#邏輯問題

添加字段時的C#邏輯問題

C#
ibeautiful 2022-06-19 09:48:24
我有一個包含 4 條記錄的列表。如果有相同年齡的動物,我需要添加它們的年齡并將其添加為單獨(dú)的列。例如看下表。姓名 | 年齡 | 性別螞蟻 | 9 | 米螞蟻 | 2 | 米獅子| 8 | 米豬 | 1 | F有 2 條記錄是重復(fù)的 (Ant)。我需要添加重復(fù)項(xiàng)的年齡,因此會有一條新記錄,例如:螞蟻 | 11 | 米總共應(yīng)該有 5 條記錄以及新添加的行(在上面添加)。我面臨的問題是,我能夠添加新添加的記錄(即通過添加年齡字段)。但是,此記錄會覆蓋初始字段中的第一條記錄。如何將此記錄添加為新字段。到目前為止我的代碼:foreach (var animal in duplicates){        Animal ani = listAnimals.First(a=> a.Name.Equals(animal.Name));        ani.Age += animal.Age;}
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個贊

你可以很容易地使用 Linq 做到這一點(diǎn)


假設(shè)您的 Animal Type 聲明為


public class Animal

{

public string Name {get;set;}

public int Age{get;set;}

public string Gender {get;set;}

}

您可以按名稱對重復(fù)項(xiàng)進(jìn)行分組并計算年齡總和。


var list = new List<Animal>{ 

    new Animal{Name="Ant",Age=9,Gender="M"},

    new Animal{Name="Ant",Age=2,Gender="M"},

    new Animal{Name="Lion",Age=8,Gender="M"},

    new Animal{Name="Pig",Age=1,Gender="F"},

    };


    list.AddRange( list.GroupBy(x=>x.Name)

                .Where(x=>x.Count()>1)

                .Select(x=> new Animal{Name = x.First().Name, Gender= x.First().Gender, Age = x.Sum(c=>c.Age)}));

輸出


Name Age Gender

Ant   9   M 

Ant   2   M 

Lion  8   M 

Pig   1   F 

Ant   11  M 


查看完整回答
反對 回復(fù) 2022-06-19
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個贊

var animals = new List<Animal>

{

    new Animal { Name = "Ant", Age = 9, Gender = "M"},

    new Animal { Name = "Ant", Age = 2, Gender = "M"},

    new Animal { Name = "Lion", Age = 8, Gender = "M"},

    new Animal { Name = "PIG", Age = 1, Gender = "F"},

};


var new_animals =

    from animal in animals

    group animal by animal.Name into grp

    where grp.Count() >= 2

    select new Animal

    {

        Name = grp.Key,

        Age = grp.Sum(a => a.Age),

        Gender = "M"

    };



animals.AddRange(new_animals);


foreach(var animal in animals)

{

    WriteLine(animal);

}


查看完整回答
反對 回復(fù) 2022-06-19
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊

您的代碼會覆蓋現(xiàn)有的動物,因?yàn)槟鷽]有為總數(shù)創(chuàng)建新的動物new Animal()。


在重復(fù)項(xiàng)下方的正確位置獲取重復(fù)項(xiàng)總計非常棘手。為此,我將創(chuàng)建一個新類,Animal以便能夠?qū)游锱c總數(shù)記錄區(qū)分開來。


class Animal

{

    public string Name { get; set; }

    public int Age { get; set; }

    public string Gender { get; set; }

}


class AnimalTotals : Animal

{

}

像這樣創(chuàng)建重復(fù)的總計:


var duplicateTotals = listAnimals

    .GroupBy(a => (a.Name, a.Gender))

    .Where(g => g.Count() > 1)

    .Select(g => new AnimalTotals {

        Name = g.Key.Name,

        Age = g.Sum(a => a.Age),

        Gender = g.Key.Gender

    });

請注意,我使用值元組(在 C# 7.0 中引入)來創(chuàng)建由名稱和性別組成的組鍵。


然后我將重復(fù)的總數(shù)與現(xiàn)有列表合并,并對結(jié)果進(jìn)行排序以獲得重復(fù)項(xiàng)下方的總數(shù)。


listAnimals = listAnimals

    .Concat(duplicateTotals)

    .OrderBy(a => a.Name)

    .ThenBy(a => a.Gender)

    .ThenBy(a => a is AnimalTotals ? 1 : 0)

    .ToList();

有了這個樣本數(shù)據(jù)


var listAnimals = new List<Animal> {

    new Animal{ Name="Ant",  Age = 9, Gender = "M" },

    new Animal{ Name="Ant",  Age = 2, Gender = "M" },

    new Animal{ Name="Ant",  Age = 5, Gender = "F" },

    new Animal{ Name="Ant",  Age = 1, Gender = "F" },

    new Animal{ Name="Lion", Age = 8, Gender = "M" },

    new Animal{ Name="Pig",  Age = 1, Gender = "F" },

};

的輸出


foreach (Animal a in listAnimals) {

    if (a is AnimalTotals) {

        Console.WriteLine($"{a.Name} {a.Gender} totals: {a.Age,4}");

    } else {

        Console.WriteLine($"{a.Name,-6}   {a.Age,2}   {a.Gender}");

    }

}


Ant       5   F

Ant       1   F

Ant F totals:    6

Ant       9   M

Ant       2   M

Ant M totals:   11

Lion      8   M

Pig       1   F


查看完整回答
反對 回復(fù) 2022-06-19
  • 3 回答
  • 0 關(guān)注
  • 127 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號