我正在使用 xpath2 的索引值来返回排序的节点序列中的 current() 索引。使用 SAXON,节点的排序序列是唯一的,但 index-of 返回两个值的序列。
这不会一直发生,只是偶尔发生,但我找不到任何原因。有人可以解释一下发生了什么吗?
我已经根据例程给出这种奇怪行为的数据示例编写了一个最小示例。
源数据为:
<data>
<student userID="1" userName="user1"/>
<session startedOn="01/16/2012 15:01:18">
</session>
<session startedOn="11/16/2011 13:31:33">
</session>
</data>
Run Code Online (Sandbox Code Playgroud)
我的 xsl 文档将会话节点放入根模板最顶部的排序序列 $orderd 中:
<xsl:template match="/">
<xsl:variable name="nodes" as="node()*" select="/data/session"></xsl:variable>
<xsl:variable name="orderd" as="node()*">
<xsl:for-each select="$nodes">
<xsl:sort select="xs:dateTime(xs:dateTime(concat(substring(normalize-space(@startedOn),7,4),'-',substring(normalize-space(@startedOn),1,2),'-',substring(normalize-space(@startedOn),4,2),'T',substring(normalize-space(@startedOn),12,8)))
)" order="ascending"/>
<xsl:sequence select="."/>
</xsl:for-each>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)
由于节点已经由@startOn 排序,但顺序相反,序列 $orderd 应该与文档排序序列 $nodes 相同,但顺序相反。
当我使用 for-each 语句创建输出时,我发现在使用 index-of 测试时,这两个节点以某种方式被视为相同。
下面的代码用于输出数据(并且紧跟在上面的块之后):
<output>
<xsl:for-each select="$nodes">
<xsl:sort select="position()" order="descending"></xsl:sort>
<xsl:variable name="index" select="index-of($orderd,current())" as="xs:integer*"></xsl:variable>
<xsl:variable name="pos" select="position()"></xsl:variable>
<session reverse-documentOrder="{$pos}" sortedOrder="{$index}"/>
</xsl:for-each>
</output>
Run Code Online (Sandbox Code Playgroud)
正如输出(如下所示)所示,index-of 函数返回序列 …
VB2010.我正在尝试使用Enumeration单位的内容填充ComboBox.我已经设法用字典做了这个.就像是
Dim dUnits As New Dictionary(Of String, Integer)
Dim da As String
For Each enumValue As eUnits In System.Enum.GetValues(GetType(eUnits))
da = ConvertEnumToCommonName 'gets unique name for an enumeration
dUnits.Add(da, enumValue)
Next
cbo.DisplayMember = "Key" 'display the the common name
cbo.ValueMember = "Value" 'use the enumeration as the value
cbo.DataSource = New BindingSource(dUnits, Nothing)
Run Code Online (Sandbox Code Playgroud)
当我加载我的表格运作良好.现在,用户可以选择要显示的默认单位.那么我试试吧
Dim defUnits As eUnits = eUnits.Feet
Dim idx As Integer = cbo.Items.IndexOf(defUnits) 'doesnt work, returns a -1
cbo.SelectedIndex = idx
Run Code Online (Sandbox Code Playgroud)
我已经做了一段时间的研究,并且相当肯定这与ComboBox将值存储为字符串有关,实际上我正在搜索一个整数的枚举.不知道我是否有这个权利.无论如何,我似乎无法选择默认项目.我可以尝试另一种方法吗?
我在重复某些值的数组中使用一组数值。我想找到所有重复值出现的索引。
例如,我使用以下代码indexOf():
var dataset = [2,2,4,2,6,4,7,8];
return dataset.indexOf(2);
Run Code Online (Sandbox Code Playgroud)
但这仅给出了第一次出现的索引2。(即它返回值0。)
但是,我希望2返回所有出现的索引(即0,1,3)。我怎样才能做到这一点?(我知道我可以使用for循环,但我想知道是否有更好的方法来做到这一点,而无需遍历整个数组。基本上,我试图节省显式遍历整个数组的开销。)
我需要在 postgresql 中实现 stringUtils Class indexOf() 方法。
假设我有一个table其中url的列之一。
url : "http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit"
我的要求是在上面的 url 中找到 '/' 的第 3 次出现的索引并做 substring 并且只取paypal-info.com 主机名Postgresql Query
任何关于实现这一点的想法将不胜感激。谢谢
var longString = "this string is long but why"
var shortString = "but why"
Run Code Online (Sandbox Code Playgroud)
我如何测试shortString是否不仅包含在longString中,而且它实际上是字符串的最后一部分.
我曾经indexOf == 0测试过字符串的开头但不知道如何结束它
我有一个列数很少的数据网格-
网格的标题是超链接,我在运行时设置它的值如下-
string strQ1 = "<a href='somePage.aspx?ID=1'>gfgytyty<a>";
dtGrid.Columns[0].Header = strq1;
string strQ2 = "<a href='somePage.aspx?ID=2'>yhtryrtuyu<a>";
dtGrid.Columns[1].Header = strq2;
and so on...
Run Code Online (Sandbox Code Playgroud)
它工作正常。现在假设我想通过名称获取 datatgrid 特定列的索引,但我无法获取它。我试过
int colIndex = dtGrid.Columns.IndexOf(dtGrid.Columns[strQ2]);
Run Code Online (Sandbox Code Playgroud)
这应该返回 1 作为 columnIndex 但它返回 -1,
此外, dtGrid.Columns[strQ2] 给我空值。
我在这里做错了什么?
在给定多个属性的情况下,获取对象数组中对象索引的最佳方法是什么?
想象一下以下示例数组:
var array = [
{
color: 'red',
shape: 'square',
weight: 200
},
{
color: 'blue',
shape: 'circle',
weight: 300
},
{
color: 'red',
shape: 'circle',
weight: 100
}
];
Run Code Online (Sandbox Code Playgroud)
现在我想拥有属性是和是indexOf的对象,在这个例子中,将是.colorredshapecircle2
理想情况下,该函数将在其属性的子集被给出时返回对象的索引,如果没有找到索引则{color: 'red', shape: 'circle'}返回-1。
我只是javaScript的初学者,拥有python的背景.我正在尝试这个练习来检查string2的每个字符是否都包含在string1中.例如,如果STRING1是"你好",我会回来true,如果字符串2是"列城"的false,如果字符串2为"低".
我提出的是这个:
function mutation(arr) {
var set = new Set(string1.split(''));
for (var i = 0; i < string2.length; i++)
if (!set.has(string2[i]))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我还可以去转换字符串2为一组,然后就采取即操作的差异set(string2) - set(string1),这将取我的一组是包含字符串,但不是在字符串1个字符,但我读创建一组是昂贵的,所以我没有去先.
我检查了其他解决方案,每个人都在使用string1.indexOf(letter)方法来检查string2中的每个字母是否都在string1中.
我想知道什么时候应该使用一组差异.为什么每个人都在使用array.indexOf()花费O(n)而不是set.has()O(1)的方法的方法.如果我正在使用,是否有任何陷阱set.has().(说浏览器兼容性)?
任何建议都有帮助.
这是我找到的用于回答这个问题的代码:编写一个 JavaScript 程序以从数组中删除重复项(忽略大小写敏感)。
var arr1=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3, 'A'];
var uniqueArray = arr1.filter(function(elem,i,rep){
return i == rep.indexOf(elem);
})
console.log(uniqueArray);
Run Code Online (Sandbox Code Playgroud)
我知道 filter() 的作用,并且 indexOf 用于查找元素第一次出现的索引,但我不明白这一行是如何做到的:
i == rep.indexOf(elem);
Run Code Online (Sandbox Code Playgroud)
仅将唯一元素引入 uniqueArray。
在Swift 5之前,我已经使用了该扩展程序:
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.encodedOffset
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我收到了不赞成使用的消息:
'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use `utf16Offset(in:)` to achieve the same behavior.
Run Code Online (Sandbox Code Playgroud)
有没有一个更简单的解决方案,而不是使用 utf16Offset(in:)?
我只需要作为Int传递回的字符位置的索引。
indexof ×10
javascript ×5
arrays ×4
string ×2
c# ×1
combobox ×1
datagrid ×1
dictionary ×1
enumeration ×1
java ×1
postgresql ×1
regex ×1
saxon ×1
sequences ×1
set ×1
string-utils ×1
swift ×1
swift5 ×1
vb.net ×1
winforms ×1
xpath-2.0 ×1
xslt-2.0 ×1