好吧,我测试了TreeMap,但它没有考虑字符串比较中的IgnoreCase.我需要按字典顺序排序并忽略大小写.还有其他方法吗?
谢谢,这是有效的(TreeMap(Comparator c)).但是,我有另一个问题:
public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() {
public int compare(Object h1, Object h2) {
String s1 = h1.getId();
String s2 = h2.getId();
return s1.compareToIgnoreCase(s2);
}
}; //STR_IGN_CASE_COMP
Run Code Online (Sandbox Code Playgroud)
如何将比较器广泛化以适应不同的对象?假设所有人都有getId()方法.
谢谢,马丁
尝试遵循文档,我无法使其工作.使用键字符串键入KeyedCollection.
如何在KeyedCollection中使字符串键不区分大小写?
在Dictionary上只能在ctor中传递StringComparer.OrdinalIgnoreCase.
private static WordDefKeyed wordDefKeyed = new WordDefKeyed(StringComparer.OrdinalIgnoreCase); // this fails
public class WordDefKeyed : KeyedCollection<string, WordDef>
{
// The parameterless constructor of the base class creates a
// KeyedCollection with an internal dictionary. For this code
// example, no other constructors are exposed.
//
public WordDefKeyed() : base() { }
public WordDefKeyed(IEqualityComparer<string> comparer)
: base(comparer)
{
// what do I do here???????
}
// This is the only method that absolutely must be overridden,
// because without …Run Code Online (Sandbox Code Playgroud) 我正在为一个项目的PHP代码部分工作,该项目将YYYY-MM-DD格式的日期与当前日期进行比较,以查看它是否小于当前日期.在代码的不同点,使用两种不同的方法进行这种比较.第一个用于get_timestamp()日期并运行时间戳的比较.在另一个地方,它只是将日期的字符串与输出进行比较date("Y-m-d").我的期望是两个日期字符串的比较不会提供正确的答案.但是,当我设置几个测试用例时,我得到了预期的输出.我回顾了PHP手册的两个部分以获得洞察力,但我仍然感到困惑的是,为什么比较无需转换为时间戳.
PHP手册的比较运算符部分指出,字符串要么被转换为数字,要么进行数字比较,或者它产生称为词法比较的东西.我在词法比较中找不到任何进一步的东西,但是当我读到关于字符串转换为数字并尝试使用日期字符串的示例时,我尝试了每个日期字符串的相同数字输出.
有人可以帮助我理解为什么两个日期字符串的比较大于或小于两个日期字符串(或者至少看起来有效)?我错过了什么?
作为后续工作,如果确实有效,我假设将日期转换为时间戳并根据时间戳进行比较是一种更好的做法.哪个是用于将日期转换为时间戳的更好功能:get_timestamp()或strtotime()?
示例代码小于/大于两个YYYY-MM-DD字符串的比较:
if ("2013-06-27" < "2013-06-28") { echo "less"; } // Output: less
if ("2013-06-27" > "2013-06-28") { echo "more"; } // Output: (none)
if ("2013-06-29" < "2013-06-28") { echo "less"; } // Output: (none)
if ("2013-06-29" > "2013-06-28") { echo "more"; } // Output: more
Run Code Online (Sandbox Code Playgroud)
示例代码测试转换后的YYYY-MM-DD字符串的数值
$foo = 1 + "2013-06-27";
echo "\$foo==$foo"; // Output: $foo = 2014
$foo = 1 + "2013-06-28";
echo …Run Code Online (Sandbox Code Playgroud) 我想在C++中实现一个字符串比较,比较字符串到"%"符号.
我可以这样做:
std::equal(str1.begin(),
std::find(str1.begin(), str1.end(), L'%'),
str2.begin());
Run Code Online (Sandbox Code Playgroud)
由于我在一个循环过许多字符串这样做,我不知道是否有没有两个不同的字符串遍历的方法find和equal(也许与可终止在任何时候比较的谓词).提升还可以.
有些.NET方法使用StringComparison作为参数,有些使用StringComparer(通常采用IComparer的形式).差异很明显.有一些优雅的方法如何从StringComparer获取StringComparison,反之亦然?
我总是可以编写使用Case语句的简单方法,但也许.NET中已经出现了我正在忽略的东西.
char s1[] = "0";
char s2[] = "9";
printf("%d\n", strcmp(s1, s2)); // Prints -9
printf("%d\n", strcmp("0", "9")); // Prints -1
Run Code Online (Sandbox Code Playgroud)
为什么strcmp在收到相同参数时会返回不同的值?
这些值仍然合法,因为strcmp的手册页说strcmp的返回值可以小于,大于或等于0,但我不明白为什么它们在这个例子中是不同的.
我正在研究哈希.我正在编写一个短语,我只能使用该短语的20个字符.
如何只读取字符串的20个字符?
如果它们相同,我如何比较字符串?
我非常接近这一点.如果我能看一下,我昨天有一个问题向我提出了一个问题.
我觉得很亲密,但我觉得这里的一些人也很欣赏这个挑战,我迷失了.
如果我有一个List<string>有以下成员:
今天
星期一
星期二
星期三
我希望得到一个返回的字符串day,因为这是最大的常见字符串中List<string>.无论位置和字符串长度如何,都应该这样做,只想在一大串字符串中找到最大长度的公共字符串.
我的尝试失败了一点,我选择了:
星期一星期二
周一至周三
然后Intersect在每个之间做了一个.显然,这将返回多个字符串,但对于Monday - Wednesday你nday,因为那是什么字母它具有普遍的.
这是我的代码:
List<string> strs = new List<string>();
strs.Add("Monday");
strs.Add("Tuesday");
strs.Add("Wednesday");
var v = strs.SelectMany((day, i) => strs.Select((day2, j) => new
{
iDay = i,
Day = day,
iDay2 = j,
Day2 = day2
})).Where(x => x.iDay != x.iDay2).Select(x => new string(x.Day.Intersect(x.Day2).ToArray()));
Run Code Online (Sandbox Code Playgroud)
有人有一个漂亮而整洁的解决方案吗?
注意
它不一定是LINQ
如果没有常用字符串,则返回null或清空字符串.
我正在使用C#.当我比较两个char值时,它向我发送正确的输出,比如,
'-'.CompareTo('!') //Its sending me positive value 12
Run Code Online (Sandbox Code Playgroud)
意思是' - '>'!' 是真的
但是当我比较两个相同值的字符串时,它发送给我不同的结果
"-".CompareTo("!") //Its sending me negative value -1
Run Code Online (Sandbox Code Playgroud)
意思是" - ">"!" 是假的
谁能解释一下为什么会这样做?这两种情况都不应该是"真的"吗?
此答案通过比较其内容来确定两个字符串是否是排列.如果它们包含相同数量的每个字符,则它们显然是排列.这是在O(N)时间内完成的.
我不喜欢这个答案,因为它改变了is_permutation设计目的.那说,is_permutation有一个复杂的:
在谓词的大多数O(N 2)应用中,或者如果序列已经相等则恰好为N,其中
N=std::distance(first1, last1)
所以我不能提倡使用is_permutation比手动旋转算法慢几个数量级的地方.但是,该标准的实施者肯定不会错过这种明显的改进吗?那么为什么是is_permutation O(N 2)?