求一个排序算法.....

火拼阿三 2013-12-20 01:34:24
现在有一组字符串..

string str = @"ID
Code
MarketType
StockType
Name
Open
Close
Change
ChangePercent
High
Low
Volume
Amount
PreviousClose
AveragePrice
LastUpdate
InternalBoard
ExchangedTicks
QuotationStatus
Amplitude
CommissionRate
CommissionDifference
Order
BuyOrder
SellOrder
OrderComparison
PriceComparison
FiveMinuteChangePercent
FiveDayAverageVolume
VolumeRate
TurnoverRate
PERation
MarketValue
EarningPerShare
ListingDate
IssuingPrice
TotalIssuedCapital
BuyPrice1
BuyPrice2
BuyPrice3
BuyPrice4
BuyPrice5
SellPrice1
SellPrice2
SellPrice3
SellPrice4
SellPrice5
BuyVolume1
BuyVolume2
BuyVolume3
BuyVolume4
BuyVolume5
SellVolume1
SellVolume2
SellVolume3
SellVolume4
SellVolume5
BuyVolumeDifferences
SellVolumeDifferences
Details
Boards
ChangePercent3Day
ChangePercent6Day
TurnoverRate3Day
TurnoverRate6Day
FlowCapital
NetAssetsPerShare
FlowCapitalValue
PB
OrderRate
TotalCapital
Speed
DDX
DDY
DDZ
DDX5
DDX10
DDY5
DDY10
DDXRed
DDXRed5
DDXRed10
SBBuy
SBSell
SBRate
BBuy
BSell
BRate
PriceDigit
VolumeUnit
SpecialRule";

得到结果如:比如其中一个字段Volume
得到的排序要所有包括Volume这个字段的
长的最上面,短的在最下面,Volume就在这些字段的下面
上面所指的只是其中一个字段
结果比如:

BuyVolumeDifferences
SellVolumeDifferences
BuyVolume1
BuyVolume2
BuyVolume3
BuyVolume4
BuyVolume5
SellVolume1
SellVolume2
SellVolume3
SellVolume4
SellVolume5
VolumeUnit
Volume

希望大神们能帮忙看下。。。
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
引用 10 楼 jinfengyiye 的回复:
楼主不会举一返三吗? 一个能意在断,两个你加个|| v.Contains("other")就行了啊? 你会问我三个怎么?那就用一个方法来判断不就行了吗
好的。谢谢我明白了。。我自己在试下。。。结贴啦。。。
gw6328 2013-12-20
  • 打赏
  • 举报
回复
楼主不会举一返三吗? 一个能意在断,两个你加个|| v.Contains("other")就行了啊? 你会问我三个怎么?那就用一个方法来判断不就行了吗
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
引用 7 楼 jinfengyiye 的回复:

            string[] arrx = str.Split('\n');

            var query = arrx.Where(v => v.Contains("Volume")).Select(v => new { Val = v.Trim(), Len = v.Trim().Length }).OrderByDescending(r => { return r.Len; });

            foreach (var q in query)
            {
                Console.WriteLine("{0}", q.Val);
            }

            Console.Read();
是你字符串格式问题哈.
一个我排序也没问题,问题是多个的话就算了。。倒序的话。。
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
引用 7 楼 jinfengyiye 的回复:

            string[] arrx = str.Split('\n');

            var query = arrx.Where(v => v.Contains("Volume")).Select(v => new { Val = v.Trim(), Len = v.Trim().Length }).OrderByDescending(r => { return r.Len; });

            foreach (var q in query)
            {
                Console.WriteLine("{0}", q.Val);
            }

            Console.Read();
是你字符串格式问题哈.
数据已经给出来了,里面Volume只是其中一个,所有匹配怎么办呢?
gw6328 2013-12-20
  • 打赏
  • 举报
回复

            string[] arrx = str.Split('\n');

            var query = arrx.Where(v => v.Contains("Volume")).Select(v => new { Val = v.Trim(), Len = v.Trim().Length }).OrderByDescending(r => { return r.Len; });

            foreach (var q in query)
            {
                Console.WriteLine("{0}", q.Val);
            }

            Console.Read();
是你字符串格式问题哈.
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
我把变成数组集合方法都丢出来吧,方便大街直接使用和测试。。

  String Before = @"ID                           
Code                         
MarketType                   
StockType                    
Name                        
Open                         
Close                        
Change                       
ChangePercent                
High                         
Low                          
Volume                       
Amount                       
PreviousClose                
AveragePrice                 
LastUpdate                   
InternalBoard                
ExchangedTicks               
QuotationStatus              
Amplitude                    
CommissionRate               
CommissionDifference         
Order                        
BuyOrder                     
SellOrder                    
OrderComparison              
PriceComparison              
FiveMinuteChangePercent      
FiveDayAverageVolume         
VolumeRate                   
TurnoverRate                 
PERation                     
MarketValue                  
EarningPerShare              
ListingDate                  
IssuingPrice                 
TotalIssuedCapital           
BuyPrice1                    
BuyPrice2                    
BuyPrice3                    
BuyPrice4                    
BuyPrice5                    
SellPrice1                   
SellPrice2                   
SellPrice3                   
SellPrice4                   
SellPrice5                   
BuyVolume1                   
BuyVolume2                   
BuyVolume3                   
BuyVolume4                   
BuyVolume5                   
SellVolume1                  
SellVolume2                  
SellVolume3                  
SellVolume4                  
SellVolume5                  
BuyVolumeDifferences         
SellVolumeDifferences        
Details                      
Boards                       
ChangePercent3Day            
ChangePercent6Day            
TurnoverRate3Day             
TurnoverRate6Day             
FlowCapital                  
NetAssetsPerShare            
FlowCapitalValue             
PB                           
OrderRate                    
TotalCapital                 
Speed                        
DDX                          
DDY                          
DDZ                          
DDX5                         
DDX10                        
DDY5                         
DDY10                        
DDXRed                       
DDXRed5                      
DDXRed10                     
SBBuy                        
SBSell                       
SBRate                       
BBuy                         
BSell                       
BRate                       
PriceDigit
VolumeUnit
SpecialRule";
 String[] strArr = Before.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
                List<string> list = new List<string>();
                if (strArr.Length > 0)
                {
                    for (int i = 0; i < strArr.Length; i++)
                    {
                        if (!string.IsNullOrEmpty(strArr[i]))
                            list.Add(strArr[i].Trim());
                    }
                }
夜轻风 2013-12-20
  • 打赏
  • 举报
回复
先用Array.sort排序,排好序的数组再循环一下,看数组中相邻两个元素中后一个是否包含前一个,如果是互换位置
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
引用 3 楼 jinfengyiye 的回复:

            string[] arr ={
                         "ab","cd","a","adfsdad","asdgrwe","dgsetwt"
                         };
            var query = arr.Where(v => v.Contains("a")).Select(v => v).OrderByDescending(v => { return v.Length; });

            foreach (var q in query)
            {
                Console.WriteLine(q);
            }

这个有几个问题,一个我不知道里面包含多少个类似Volume,比如里面有DD等其他这样的字段 还有根据长度是有问题的,我测试了一下,因为里面惨杂了许多其他的字段,所以已排序就乱了, 我本身是这么使用的。。
gw6328 2013-12-20
  • 打赏
  • 举报
回复

            string[] arr ={
                         "ab","cd","a","adfsdad","asdgrwe","dgsetwt"
                         };
            var query = arr.Where(v => v.Contains("a")).Select(v => v).OrderByDescending(v => { return v.Length; });

            foreach (var q in query)
            {
                Console.WriteLine(q);
            }

火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
大神们帮忙看下,在线等,秒结贴,给分。。。
火拼阿三 2013-12-20
  • 打赏
  • 举报
回复
希望大神能帮忙看看,在线结贴。。。100分送上。。。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧