首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

求1函数(获取数组中指定重出现次数的元素集)

2012-12-22 
求一函数(获取数组中指定重出现次数的元素集)求一函数(获取数组中指定重出现次数的元素集)如:a1,2,2,3,3,

求一函数(获取数组中指定重出现次数的元素集)
求一函数(获取数组中指定重出现次数的元素集)
如:a=1,2,2,3,3,4,4,4,5,5,5,6,6,6

指定取重复两次的元素:返回结果=2,3

[最优解释]

Imports System.IO
Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Dim arr As Integer() = {1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6}
        Dim dict As Dictionary(Of Integer, Integer) = GetRepeat(arr, 2)
        For Each key As Integer In dict.Keys
            Console.WriteLine(key.ToString() + "重复了" + dict(key).ToString() + "次")
        Next
        Console.ReadKey()
    End Sub

    Function GetRepeat(ByVal arr As Integer(), ByVal repeat As Integer) As Dictionary(Of Integer, Integer)
        Dim dict As New Dictionary(Of Integer, Integer)
        For Each i As Integer In arr
            If dict.ContainsKey(i) Then
                dict(i) = dict(i) + 1
            Else
                dict.Add(i, 1)
            End If
        Next
        Dim result As New List(Of Integer)
        For Each key As Integer In dict.Keys
            If dict(key) <> repeat Then result.Add(key)
        Next
        For Each key As Integer In result
            dict.Remove(key)
        Next
        Return dict
    End Function
End Module

[其他解释]

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim arr As Integer() = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7}
        Console.WriteLine(GetValue(arr, 2))
    End Sub
        Private Function GetValue(ByVal arr() As Integer, ByVal count As Integer) As String


        Dim value As String = String.Empty
        Dim dict As New Dictionary(Of Integer, Integer)
        For Each i As Integer In arr
            If dict.ContainsKey(i) Then
                dict(i) = dict(i) + 1
            Else
                dict.Add(i, 1)
            End If
        Next
        For Each key As Integer In dict.Keys
            If dict(key) = count Then
                value &= key & ","
            End If
        Next
        Return value.Trim(",")
    End Function


[其他解释]
string[] arr=a.Split(',');
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (string i in arr)
{
  if (dic.ContainsKey(i))
  dic[i] = dic[i] + 1;
  else
  dic.Add(i, 1);
}
var query =
  from a in arr
  group arr by a into g 
  orderby g.Count()
  select new
  {
  g.Key,
  count = g.Count()
  };

[其他解释]
谢谢(人生如梦) 

能不能写个vb.net 的例,劳烦一下

我上面那个只是随手写的,a本来就是数组了不用
Split拆分

好象是不是有个函数的
[其他解释]

        private void Form1_Load(object sender, EventArgs e)
        {
            int[] arr = new int[] { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7 };
            Console.WriteLine(GetValue(arr,2));
        }
        private string GetValue( int[] arr,int count)
        {
            string value=string.Empty;
            Dictionary<int, int> dict = new Dictionary<int, int>();
            foreach (int i in arr)


            {
                if (dict.ContainsKey(i)) dict[i]++;
                else dict.Add(i, 1);
            }
            foreach (int key in dict.Keys)
            {
                if (dict[key] == count)
                {
                    value += key+",";
                }
            }
            return value.Trim(',');
        }



[其他解释]
该回复于2010-07-30 13:49:35被版主删除
[其他解释]
感谢两位相助

再请教一下,这方法能不能取一个重复指定范围?

上面的例子是取得复2次的

能不能改成重复2至3次或2至5次这样的表达式?

如果不能是不是要用循环来改GetRepeat(arr, 2),2改为3或。。。




[其他解释]
那你自己修改一下吧。不是很难把。
[其他解释]

Imports System.IO
Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Dim arr As Integer() = {1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6}
        Dim dict As Dictionary(Of Integer, Integer) = GetRepeat(arr, 2, 3)
        For Each key As Integer In dict.Keys
            Console.WriteLine(key.ToString() + "重复了" + dict(key).ToString() + "次")
        Next
        Console.ReadKey()
    End Sub

    Function GetRepeat(ByVal arr As Integer(), ByVal repeatFrom As Integer, ByVal repeatTo As Integer) As Dictionary(Of Integer, Integer)
        Dim dict As New Dictionary(Of Integer, Integer)
        For Each i As Integer In arr
            If dict.ContainsKey(i) Then
                dict(i) = dict(i) + 1
            Else
                dict.Add(i, 1)
            End If


        Next
        Dim result As New List(Of Integer)
        For Each key As Integer In dict.Keys
            If dict(key) < repeatFrom Or dict(key) > repeatTo Then result.Add(key)
        Next
        For Each key As Integer In result
            dict.Remove(key)
        Next
        Return dict
    End Function
End Module


结果:

2重复了2次
3重复了2次
4重复了3次
5重复了3次
6重复了3次

[其他解释]
像这的样的函数有实例没有?能做个实例做参考,我不太会用,而且粘贴到EXCEL里提示有很多不对或出错。谢谢各位高手赐教。

热点排行