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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

c# csv使用第三列對(duì)列表進(jìn)行排序

c# csv使用第三列對(duì)列表進(jìn)行排序

C#
慕工程0101907 2023-08-20 15:20:41
我有一個(gè)程序,可以使用 StreamReader 打開 CSV 文件,并根據(jù) CSV 文件中的行數(shù)創(chuàng)建一個(gè)包含 4 列和行的表。這可以正常工作,就像創(chuàng)建以下輸出一樣:商品代碼、商品描述、當(dāng)前數(shù)量、訂購時(shí)A0001,玩具車,4,有A0002,玩具卡車,1,無我將 CSV 文件中的所有數(shù)據(jù)保存在全局列表中,而不拆分每一行。當(dāng)我創(chuàng)建表時(shí),我使用“Split(',')”分割行,這在當(dāng)時(shí)需要時(shí)工作。但是我不確定如何使用“當(dāng)前計(jì)數(shù)”列從最大到最小重新排序整個(gè)列表。我已嘗試以下操作,但在 Split(',') 上出現(xiàn)錯(cuò)誤。public static class Globals{    public static List<string> items = new List<string>();}private void createTableWithOrder(int order){    for (int i = 0; i < Globals.items.; i++)    {         var values = Globals.items[i].Split(',');         if (order == 1)         {              values = Globals.items[i].OrderBy(itemDesc => itemDesc.Split(',')).ToList();         }    }}給出的錯(cuò)誤如下:“char”不包含“Split”的定義,并且找不到接受“char”類型的第一個(gè)參數(shù)的擴(kuò)展方法“Split”(您是否缺少 using 指令或程序集引用?)
查看完整描述

4 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

該OrderBy調(diào)用正在處理處字符串中的所有字符Globals.items[i]。這就是您看到當(dāng)前錯(cuò)誤的原因。為了對(duì)整個(gè)集合進(jìn)行排序,需要對(duì)整個(gè)列表進(jìn)行排序,例如:


var values = Globals.items.Select(line => line.Split(',')); // Select columns for all rows

var orderedListOfValues = values

    .OrderByDescending(cols => int.TryParse(cols[2].Trim(), out var order) ? order : int.MaxValue); // Sort  by count as an integer

請(qǐng)注意,在上面的示例中,對(duì)非數(shù)字值(例如標(biāo)題)進(jìn)行排序?qū)⑹褂谜麛?shù)的最大值。根據(jù)預(yù)期的結(jié)果,這些結(jié)果可以合并回字符串列表中以供演示:


var orderedItems = string.Join(",", orderedListOfValues)

干杯!


查看完整回答
反對(duì) 回復(fù) 2023-08-20
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

您存儲(chǔ)列表的方式不會(huì)幫助您生成具有排序功能的表。要解決您的問題,List<string>您應(yīng)該使用這些模型創(chuàng)建列表來創(chuàng)建模型(IItem 接口和 Item 類)。然后在渲染表格之前,您可以根據(jù)您喜歡的任何列對(duì)列表進(jìn)行排序。

List<IItem> items = new List<Item>();
items.Add({itemCode: excelData.itemCode , itemDescription: excelData.itemDescription,itemCount: excelData.itemCount, orderCount:excelData.orderCount});
List<IItem> itemsToCreateTable = items.OrderBy(o=>o.itemCount).ToList();


查看完整回答
反對(duì) 回復(fù) 2023-08-20
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

不是直接回答你的問題。但我認(rèn)為您正在編寫已經(jīng)可以免費(fèi)使用的代碼。

我強(qiáng)烈建議您使用nuget 包 CSV Helper。它接受任何文本流、字符串、文本閱讀器等,并將 CSV 文件轉(zhuǎn)換為您期望類型的 IEnumerable。它可以在有或沒有包含列的標(biāo)題行的情況下使用

class MyItem

{

? ? public string Code {get; set;}

? ? public string Description {get; set;}

? ? public int Count {get; set;}

? ? public bool OnOrder {get; set;}

}

從 CSV 文件中獲取所有 MyItems:


string myCsvFileName = ...

using (TextReader reader = new StreamReader(myCsvFileName))

{

? ? using (var csv = new CsvReader(reader))

? ? {? ??

? ? ? ? IEnumerable<MyItem> items = reader.GetRecords<MyItem>();


? ? ? ? // you can do any Linq with this:

? ? ? ? var allItems = items.ToList();


? ? ? ? // or if you only need some records:

? ? ? ? var unAvailableItems = items.Where(item => item.Count == 0);

? ? }

}

閱讀鏈接以了解如果您有特殊分隔符、標(biāo)題行或其他任何內(nèi)容該怎么辦。它是高度可配置的。


查看完整回答
反對(duì) 回復(fù) 2023-08-20
?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

目前尚不清楚為什么您不簡單地為文件中的項(xiàng)目創(chuàng)建一個(gè)“類”。通過“類別”,您可以以任何您選擇的方式和多種方式對(duì)項(xiàng)目進(jìn)行排序。此外,您想要排序的列(當(dāng)前計(jì)數(shù))似乎是數(shù)字。如果您將數(shù)字排序?yàn)?code>strings,您將得到所有 1 在一起、2 在一起等。例如,它看起來像這樣。

1

10

100

2

20

3

4 …

您將無法使用字符串獲得正確的數(shù)字排序順序。因此,您必須按數(shù)字而不是字符串對(duì)列進(jìn)行排序才能獲得正確的數(shù)字順序。使用類背后的想法是它可以讓您完全控制排序。如果你創(chuàng)建一個(gè)List并且Item該類Item實(shí)現(xiàn)了該IComparable接口,則可以用一行代碼完成排序......Items.Sort().

下面是上述內(nèi)容的示例。首先是“類”Item來保存文件中的對(duì)象。它僅包含此示例所需的屬性,即CompareTo調(diào)用時(shí)將使用的方法Items.Sort().

public class Item : IComparable {


  public string Code { get; set; }

  public string Description { get; set; }

  public int Count { get; set; }

  public bool OnOrder { get; set; }


  public Item(string code, string description, int count, bool onOrder) {

    Code = code;

    Description = description;

    Count = count;

    OnOrder = onOrder;

  }


  public int CompareTo(object obj) {

    Item that = (Item)obj;

    return Count.CompareTo(that.Count);

  } 

}

Item下面是使用該類按“當(dāng)前計(jì)數(shù)”列對(duì)列表進(jìn)行排序的示例。ADataGridView用于顯示排序列表。


List<Item> Items;


public Form1() {

  InitializeComponent();

}


private void Form1_Load(object sender, EventArgs e) {

  Items = GetData();

  Items.Sort();

  dataGridView1.DataSource = Items;

}


private List<Item> GetData() {

  List<Item> items = new List<Item>();

  Item newItem;

  string line;

  using (StreamReader sr = new StreamReader(@"D:\Test\Test22.csv")) {

    while ((line = sr.ReadLine()) != null) {

      if ((newItem = GetItemFromString(line)) != null) {

        items.Add(newItem);

      }

    }

  }

  return items;

}


private Item GetItemFromString(string itemString) {

  string[] splitArray = itemString.Split(',');

  bool onOrder;

  int count = 0;

  if (splitArray.Length >= 4) {

    int.TryParse(splitArray[2].Trim(), out count);

    if (splitArray[3].Trim() == "Yes")

      onOrder = true;

    else

      onOrder = false;

    return new Item(splitArray[0].Trim(), splitArray[1].Trim(), count, onOrder);

  }

  return null;

}

希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2023-08-20
  • 4 回答
  • 0 關(guān)注
  • 268 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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