为什么这段代码返回true:
new Byte() == new Byte() // returns true
Run Code Online (Sandbox Code Playgroud)
但是这段代码返回false:
new Byte[0] == new Byte[0] // returns false
Run Code Online (Sandbox Code Playgroud) 我的问题不是浮动精度.这是为什么Equals()不同于==.
我明白为什么.1f + .2f == .3f是false(同时.1m + .2m == .3m是true).
我得到的==是参考,.Equals()是价值比较.(编辑:我知道还有更多.)
但是,为什么(.1f + .2f).Equals(.3f) true,而(.1d+.2d).Equals(.3d)仍然是false?
.1f + .2f == .3f; // false
(.1f + .2f).Equals(.3f); // true
(.1d + .2d).Equals(.3d); // false
Run Code Online (Sandbox Code Playgroud) 我需要找出用户在Javascript中选择的两个日期是否相同.日期以字符串("xx/xx/xxxx")传递给此函数.这就是我需要的所有粒度.
这是我的代码:
var valid = true;
var d1 = new Date($('#datein').val());
var d2 = new Date($('#dateout').val());
alert(d1+"\n"+d2);
if(d1 > d2) {
alert("Your check out date must be after your check in date.");
valid = false;
} else if(d1 == d2) {
alert("You cannot check out on the same day you check in.");
valid = false;
}
Run Code Online (Sandbox Code Playgroud)
将日期转换为对象后的javascript警报如下所示:
2011年1月25日星期二00:00:00 GMT-0800(太平洋标准时间)
2011年1月25日星期二00:00:00 GMT-0800(太平洋标准时间)
确定日期1是否大于日期2的测试有效.但是使用==或===运算符不会将valid更改为false.
我需要在Javascript中比较两个数值相等.值也可以NaN.我想出了这段代码:
if (val1 == val2 || isNaN(val1) && isNaN(val2)) ...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它看起来很臃肿.我想让它更简洁.有任何想法吗?
除了单独逐步执行元素之外,如何比较两个字符串列表是否相等(在.NET 3.0中):
这失败了:
// Expected result.
List<string> expected = new List<string>();
expected.Add( "a" );
expected.Add( "b" );
expected.Add( "c" );
// Actual result
actual = new List<string>();
actual.Add( "a" );
actual.Add( "b" );
actual.Add( "c" );
// Verdict
Assert.IsTrue( actual == expected );
Run Code Online (Sandbox Code Playgroud) 如果我有两个对象o1和o2,我们就知道了
id(o1) == id(o2)
Run Code Online (Sandbox Code Playgroud)
返回true.
然后,它是否遵循这一点
o1 == o2
Run Code Online (Sandbox Code Playgroud)
或者情况并非如此?我正在研究的论文说情况并非如此,但在我看来应该是真的!
最近关于集合的讨论出现了,在Scala中支持该zip方法以及如何导致bug,例如
scala> val words = Set("one", "two", "three")
scala> words zip (words map (_.length))
res1: Set[(java.lang.String, Int)] = Set((one,3), (two,5))
Run Code Online (Sandbox Code Playgroud)
我认为很明显Sets不应该支持一个zip操作,因为元素没有被排序.但是,有人认为这个问题Set不是真正的算子,也不应该有map方法.当然,你可以通过映射集合来解决自己的问题.现在切换到Haskell,
data AlwaysEqual a = Wrap { unWrap :: a }
instance Eq (AlwaysEqual a) where
_ == _ = True
instance Ord (AlwaysEqual a) where
compare _ _ = EQ
Run Code Online (Sandbox Code Playgroud)
现在在ghci
ghci> import Data.Set as Set
ghci> let nums = Set.fromList [1, 2, 3]
ghci> Set.map unWrap $ Set.map …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
>>> x = "google"
>>> x is "google"
True
>>> x = "google.com"
>>> x is "google.com"
False
>>>
Run Code Online (Sandbox Code Playgroud)
为什么会那样?
为了确保上述内容正确,我刚刚在Linux上测试了Python 2.5.4,2.6.5,2.7b2,Python 3.1和Linux上的Python 2.7b1.
看起来所有这些都是一致的,所以它是设计的.我错过了什么吗?
我发现,我的一些个人域名过滤脚本失败了.
假设字典键和值的equals和hash方法正确实现,那么测试两个字典相等的最简洁有效的方法是什么?
在这种情况下,如果它们包含相同的一组键(顺序并不重要),则说两个字典是相等的.对于每个这样的键,它们都同意该值.
这里有一些我提出的方法(可能还有更多):
public bool Compare1<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey,TValue> dic2)
{
return dic1.OrderBy(x => x.Key).
SequenceEqual(dic2.OrderBy(x => x.Key));
}
public bool Compare2<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Count == dic2.Count &&
dic1.Intersect(dic2).Count().
Equals(dic1.Count));
}
public bool Compare3<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Intersect(dic2).Count().
Equals(dic1.Union(dic2).Count()));
}
Run Code Online (Sandbox Code Playgroud) 我注意到这两个接口,以及几个相关的类,已经在.NET 4中添加了.它们对我来说似乎有点多余; 我已经阅读了几个关于它们的博客,但我仍然无法弄清楚它们在.NET 4之前解决了哪些棘手问题.
什么是使用IStructuralEquatable和IStructuralComparable?
equality ×10
c# ×4
.net ×3
comparison ×2
javascript ×2
python ×2
collections ×1
date ×1
dictionary ×1
functor ×1
haskell ×1
icomparable ×1
identity ×1
nan ×1
scala ×1