ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
ฉันทำอะไรลงไป? TSource หมายถึงอะไร?
ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
ฉันทำอะไรลงไป? TSource หมายถึงอะไร?
คำตอบ:
ปัญหาคือคุณโทรมาList<T>.Reverse()
ซึ่งจะกลับvoid
มา
คุณสามารถทำได้:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
หรือ:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
อย่างหลังนี้มีราคาแพงกว่าเนื่องจากการย้อนกลับโดยพลการIEnumerable<T>
นั้นเกี่ยวข้องกับการบัฟเฟอร์ข้อมูลทั้งหมดแล้วให้ผลทั้งหมด - ในขณะที่List<T>
สามารถทำการย้อนกลับ "ในตำแหน่ง" ได้ทั้งหมด (ความแตกต่างคือมันเรียกEnumerable.Reverse<T>()
วิธีการขยายแทนที่จะเป็นList<T>.Reverse()
วิธีการอินสแตนซ์)
ยังมีประสิทธิภาพมากขึ้นคุณสามารถใช้:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
วิธีนี้หลีกเลี่ยงการสร้างบัฟเฟอร์ที่มีขนาดไม่เหมาะสมโดยเสียค่าใช้จ่ายในการใช้งบสี่รายการซึ่งจะทำ ... เช่นเคยชั่งน้ำหนักความสามารถในการอ่านเทียบกับประสิทธิภาพในกรณีการใช้งานจริง
ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่ฉันก็มีปัญหาเหมือนกันยกเว้นสตริงของฉันมีช่องว่างรวมอยู่ด้วย สำหรับผู้ที่ต้องการทราบวิธีแยกสตริงที่มีมากกว่าแค่ลูกน้ำ:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions ลบเร็กคอร์ดที่จะเป็นเพียงช่องว่าง char ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
อันนี้ใช้ได้เลย
ลองสิ่งนี้:
List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
สิ่งที่คุณขาดหายไปที่นี่คือ Reverse () เป็นวิธีโมฆะ ไม่สามารถกำหนดผลลัพธ์ของ. Reverse () ให้กับตัวแปรได้ อย่างไรก็ตามคุณสามารถเปลี่ยนลำดับเพื่อใช้ Enumerable.Reverse () และรับผลลัพธ์ของคุณ
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
ความแตกต่างคือ Enumerable.Reverse () ส่งคืน IEnumerable <T> แทนที่จะเป็นผลตอบแทนที่เป็นโมฆะ
หากคุณกำลังพยายาม
สิ่งต่อไปนี้ควรใช้งานได้:
string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
.Split(new char[]{',', '|'})
.Where(x=>x!=null && x.Trim().Length > 0)
.Select(x=>x.Trim());
เอาต์พุต
ตอนนี้คุณสามารถย้อนกลับลำดับตามที่คนอื่นแนะนำได้อย่างชัดเจน