| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1154 人关注过本帖
标题:如何把出现的次数以小到大和以大到小进行排列?
只看楼主 加入收藏
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
结帖率:89.13%
收藏
 问题点数:0 回复次数:5 
如何把出现的次数以小到大和以大到小进行排列?
问题如下图示例:

有什么好的编程方法来处理?

图片附件: 游客没有浏览图片的权限,请 登录注册


最开始我想到的是用数组,冒号分割,那么数字分别在数组 2 4 6 8 ....的位置,但并不好排序。

[此贴子已经被作者于2022-3-4 11:00编辑过]

搜索更多相关主题的帖子: 排列 数组 次数 数字 出现 
2022-03-04 10:58
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9055
注 册:2010-3-16
收藏
得分:0 
读取分隔后存到二维数组中,这样排序比较方便了。

程序代码:
Private Sub Command1_Click()
    Dim strArr() As String
    Dim strArr2() As String
    Dim StrLine As String
    
    StrLine = "C出现次数:12" & vbCrLf & _
        "Z出现次数:8" & vbCrLf & _
        "T出现次数:123" & vbCrLf & _
        "D出现次数:10" & vbCrLf & _
        "N出现次数:9"
    
    Text1.Text = StrLine 
    
    strArr = Split(StrLine, vbCrLf)  
    
    lenArr = UBound(strArr)
    ReDim strArr2(lenArr, 1)
    
    For i = 0 To lenArr '再次分割成二维数组
        t = Split(strArr(i), "")
        strArr2(i, 0) = t(0)
        strArr2(i, 1) = t(1)
    Next
    
    For i = 0 To lenArr - 1
        For j = i To lenArr
            If (CInt(strArr2(i, 1)) > CInt(strArr2(j, 1))) Then
                t1 = strArr2(i, 0)
                t2 = strArr2(i, 1)
                strArr2(i, 0) = strArr2(j, 0)
                strArr2(i, 1) = strArr2(j, 1)
                strArr2(j, 0) = t1
                strArr2(j, 1) = t2
                
            End If            
        Next
    Next
    
    StrLine = ""
    
    For i = 0 To lenArr '组合字符串
        StrLine = StrLine & strArr2(i, 0) & "" & strArr2(i, 1) & vbCrLf
    Next
    
    Text2.Text = StrLine

End Sub




[此贴子已经被作者于2022-3-4 15:05编辑过]

2022-03-04 13:04
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
程序代码:
For i = 0 To lenArr - 1
        For j = i To lenArr
            If (CInt(strArr2(i, 1)) > CInt(strArr2(j, 1))) Then
                t1 = strArr2(i, 0)
                t2 = strArr2(i, 1)
                strArr2(i, 0) = strArr2(j, 0)
                strArr2(i, 1) = strArr2(j, 1)
                strArr2(j, 0) = t1
                strArr2(j, 1) = t2
                
            End If            
        Next
    Next
    
    StrLine = ""
    
    For i = 0 To lenArr '组合字符串
        StrLine = StrLine & strArr2(i, 0) & "" & strArr2(i, 1) & vbCrLf
    Next
    
    Text2.Text = StrLine

End Sub


这一段代码没看懂,我慢慢研究。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-03-04 16:44
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回复 2楼 apull
要处理的文件,放在桌面上。
1.txt (5.65 KB)

下面代码生成的结果会一行空行,后面会多三行空格。不知怎么去掉,求指教。

我的代码如下:

程序代码:
Private Sub Form_Load()
    Me.Hide
    Dim strArr() As String
    Dim strArr2() As String
    Dim StrLine As String
    Dim buffer As String
    Open "C:\Users\Admin\Desktop\1.txt" For Input As #1
    Do While Not EOF(1)
    Line Input #1, buffer
    StrLine = StrLine + buffer + vbCrLf
    Loop
    StrLine = Left(StrLine, Len(StrLine) - 1)  '读取文件的全部内容,并去除最后一个回车符
    Close #1
    
    strArr = Split(StrLine, vbCrLf)  '分割成一维数组
    
    lenArr = UBound(strArr)   '一维数组的数量
    ReDim strArr2(lenArr, 1)  '定义一个二维数组
    
    For i = 0 To lenArr '分割成二维数组
        t = Split(strArr(i), "")
        strArr2(i, 0) = t(0) '记录数据的文字部分
        strArr2(i, 1) = t(1) '记录数据的数字部分
    Next
    
    For i = 0 To lenArr - 1
        For j = i To lenArr
            If (CLng(strArr2(i, 1)) > CLng(strArr2(j, 1))) Then
                t1 = strArr2(i, 0)
                t2 = strArr2(i, 1)
                strArr2(i, 0) = strArr2(j, 0)
                strArr2(i, 1) = strArr2(j, 1)
                strArr2(j, 0) = t1
                strArr2(j, 1) = t2
                
            End If
        Next
    Next
    
    StrLine = ""
    
    
    For i = 0 To lenArr '组合字符串
        StrLine = StrLine & strArr2(i, 0) & "" & strArr2(i, 1) & vbCrLf
    Next
    StrLine = Left(StrLine, Len(StrLine) - 1) '去除最后面一个回车符
    Open "C:\Users\Admin\Desktop\2.txt" For Output As #1
    Print #1, StrLine
    Close #1

End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-03-04 17:12
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4940
专家分:30047
注 册:2008-10-15
收藏
得分:0 
连接部分可以使用 JOIN 函数

另外,文件处理时,要清空行的话,那么在 读取文件 及保存 之件之前,把多余的回车符干掉,
可以使用 Replace 函数
把二个 vbcrlf 换成 一个 vbcrlf
可以估计大概最多出现多少个空行,那就写几行
也可以使用 循环来判断。
(浏览器内写的代码,自己调试)
do            '循环开始
   l=len(StrLine )    '取开始长度
   strline=replace(strline,vbcrlf & vbcrlf ,vbcrlf)  '替换2个回车换行符为1个
loop while i<>len(strline)           '如果替换后的长度不等于替换前的长度,说明本次成功替换,继续循环,直到未成功替换退出循环

最后的空行,也要判断确定是空行 再去掉,
if right(strline,2)=vbcrlf then strline=left(strline,len(strline)-2)
注意,看到4楼代码中去回车符用的 -1 是错误的, vbcrlf 的长度是 2 ,不是 1 。
vbcr 或 vblf 的长度才是 1 。

如果只清尾部空行,那么把清回车的这命令照样用 循环去执行。



授人于鱼,不如授人于渔
早已停用QQ了
2022-03-04 18:59
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1927
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回车符只减了1长度导致的问题,经测试。

[此贴子已经被作者于2022-3-4 20:21编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-03-04 20:15
快速回复:如何把出现的次数以小到大和以大到小进行排列?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060583 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved