【问题标题】:Equivalence percentage between two array [closed]两个数组之间的等价百分比[关闭]
【发布时间】:2014-08-07 23:13:24
【问题描述】:

我需要一种方法来比较两个数组并计算等效百分比 因此,如果等价百分比超过(例如 60%),请执行一些操作 使用的语言是 C# .NET 4.0

【问题讨论】:

  • 你如何定义“当量百分比”?是否有您需要应用的公式/算法?
  • 没有算法
  • 如何定义等价?是匹配的元素数量吗?顺序重要吗?你想包括项目的相对比较(也就是说,如果你有单词列表,你想比较单词之间的相似性)吗?列表的长度是否计算在内?如果不了解您所说的“等效”是什么意思,就无法回答您的问题。
  • 两个数组的相交百分比

标签: c# .net arrays percentage equivalence


【解决方案1】:

这个问题定义不明确,所以我做了一些广泛的假设,但这里有一个基于元素相等性测量等效性的示例实现:

int[] a = new int[] { 1, 2, 3, 4, 5 };
int[] b = new int[] { 1, 7, 3, 4 };

int equalElements = a.Zip(b, (i, j) => i == j).Count(eq => eq);
double equivalence = (double)equalElements / Math.Max(a.Length, b.Length);
if (equivalence >= .6)
{
    // 60%+ equivalent
}

Zip: "将指定函数应用于两个序列的对应元素。"在这种情况下,我们将a 中的每个元素与b 中的相应元素进行比较,如果它们相等,则生成true。例如,我们将11 进行比较,27 进行比较,33 进行比较,44 进行比较。然后我们计算我们遇到的相等数,将此值存储到equalElements。最后,我们将其除以较大序列中的元素总数,从而得到等价比。

【讨论】:

  • 你能解释一下你在 a.Zip 方法中做了什么
  • @user3749485 RTFM
  • @user3749485:已编辑答案。
  • 这就是我要找的
【解决方案2】:

假设您正在比较两个 int 列表(或数组,它是相同的),您可以通过这种方式计算 list1list2 之间等效元素的百分比:

List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
List<int> list2 = new List<int>() { 3, 5, 8 };
var res = list1.Intersect(list2).ToList().Count();
float perc = (float)list1.Count() / res;

【讨论】:

  • @user3749485 - 你还没有告诉任何人你想要什么,那么任何人怎么能写出“有效”的东西呢?
  • +1:这是一个有效的替代解释。
  • 对不起兄弟,虽然我很清楚:(
  • 这不考虑元素/重复元素的顺序。不适用于例如List&lt;bool&gt; list = new List&lt;bool&gt;() { true, false, false };
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多