当前位置:  开发笔记 > 编程语言 > 正文

在c#中有任何算法可以单数化 - 复数一个单词吗?

如何解决《在c#中有任何算法可以单数化-复数一个单词吗?》经验,为你挑选了7个好方法。

在c#中是否有任何算法可以单数化 - 复数一个单词(英文)或者确实存在.net库来执行此操作(也可能使用不同的语言)?



1> Daniel..:

您还有System.Data.Entity.Design.PluralizationServices.PluralizationService.

更新:旧答案值得更新.现在还有Humanizer:https://github.com/MehdiK/Humanizer


使用ILSpy打开代码会显示一个名为EnglishPluralizationService的类,该类定义了许多特殊情况并进行有趣的阅读.我特别喜欢'pneumonoultramicroscopicsilicovolcanoconiosis',我发现自己一直在我的实体模型中使用... 8o)
我猜怎么加入了.一位测试人员对开发人员提出了一个错误,称它不适合这个词.Dev修复了它.两人都笑了.
嗯,你允许重新分配,或只是使用设计DLL?我问这是因为我知道DevExpress的许可证禁止重新分发任何.design DLL.
@MrKWatkins听起来更像'supercalifragilisticexpialidocious'

2> Greg Hewgill..:

我可以为世界语做这件事,没有特殊情况!

string plural(string noun) { return noun + "j"; }

对于英语,熟悉名词的常数复数规则以及名词的不规则复数将是有用的.关于英语复数的整篇维基百科文章也可能有一些有用的信息.


如果传入动词或副词,你应该把它扔掉!

3> Steven Robbi..:

大多数ORM都会对它进行刺激,尽管它们通常并不完美.我知道Castle有它的Inflector Class你可能会四处寻找."完美"这样做并不是一件容易的事(英语"规则"不是真正的规则:)),所以这取决于你是否对"合理的猜测"方法感到满意.


实际上它基本上不一样,它的相同.

4> Lawrence Dol..:

我在Java中作弊 - 我希望能够为"有一些东西"生成一个正确的字符串,所以我写了这篇文章.小重载实用方法:

static public String pluralize(int val, String sng) {
    return pluralize(val,sng,(sng+"s"));
    }

static public String pluralize(int val, String sng, String plu) {
    return (val+" "+(val==1 ? sng : plu)); 
    }

像这样调用

System.out.println("There were "+pluralize(count,"something"));
System.out.println("You have broken "+pluralize(count,"knife","knives"));


@Jeremy:为什么不呢?:println("你已通过"+ singularPlural(计数,"测验","小测验")+"到目前为止")
@Jeremy:因此"我被骗了......"的引导 - 似乎并不能保证一个下注.

5> Matt Grande..:

我根据Rails复数器一起鞭打了一个.你可以在这里看到我的博客文章,或者在这里看到github

output = Formatting.Pluralization(100, "sausage"); 


感谢分享.很高兴我不需要引用另一个组件.

6> Jay Querido..:

我在.net(C#)中创建了一个小型库,称为Pluralizer(不出所料).

这意味着使用完整的句子,像String.Format那样.

它基本上是这样的:

var target = new Pluralizer();
var str = "There {is} {_} {person}.";

var single = target.Pluralize(str, 1);
Assert.AreEqual("There is 1 person.", single);

// Or use the singleton if you're feeling dirty:
var several = Pluralizer.Instance.Pluralize(str, 47);
Assert.AreEqual("There are 47 people.", several);

它也可以做更多的事情.在我的博客上阅读更多相关信息.它也可以在NuGet中使用.


是的,那个库只做单个单词,只有名词(虽然Pluralizer在内部使用该类).该库使整个句子更容易编写.有关更多示例,请查看我的博客.Pluralizer.Instance.Pluralize("{She} {is}前往{她|他们各自的} {home}.",5)

7> Zaid Masud..:

由于问题是针对C#的,因此这是Software Monkey解决方案的一个不错的变体(再次有点“作弊”,但对我而言,确实是最实用且可重用的方式):

    public static string Pluralize(this string singularForm, int howMany)
    {
        return singularForm.Pluralize(howMany, singularForm + "s");
    }

    public static string Pluralize(this string singularForm, int howMany, string pluralForm)
    {
        return howMany == 1 ? singularForm : pluralForm;
    }

用法如下:

"Item".Pluralize(1) = "Item"
"Item".Pluralize(2) = "Items"

"Person".Pluralize(1, "People") = "Person"
"Person".Pluralize(2, "People") = "People"

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有