Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 7

12
votes
answers
44 views
+10

VBA:更改数组中变量的值

如何永久更改数组中变量的值?我写了一些代码来说明我的问题:

  Option Explicit Dim var1 As Boolean,var2 As Boolean,var3 As Boolean Sub Test()Dim arrTest As Variant Dim i arrTest = Array(var1,var2 ,var3)For each i in arrTest Debug.Print i Next for i = LBound(arrTest)To UBound(arrTest)arrTest(i)= True Next for each i in arrTest Debug.Print i Next Test2 End Sub Sub Test2()Debug .Print“Sub Test2中的var1:”& var1如果var1则Debug.Print“Hello”End End End   

直接窗口中的输出为:

  False False False True True真实var1在Sub Test2中:False   

前六行对我有意义,因为我改变了 Test 中变量的值。但是,它显然不是永久的,或者仅限于那个sub,因此 Test2 中的“Hello”没有打印出来。

我该如何改变?我已经读过每个循环的是只读的,但为什么 for -loop不起作用? / code>没有打印。

我该如何改变?我已经读过每个循环的是只读的,但为什么 for -loop不起作用? / code>没有打印。

我该如何改变?我已经读过每个循环的是只读的,但为什么 for -loop不起作用?

沙发
+60
+50

为数组的每个元素指定“True”不会使变量具有相同的值。没有什么奇怪的,你的var1仍然是假的,因为你没有改变var1的值,而是你的数组元素的值。:)

添加类似的东西

  var1 = arrTest(0)var2 = arrTest(1)var3 = arrTest(2)Test2  
     
			
        

感谢您的帮助。这有什么理由,这为什么有意义?如果我使用变量var1,var2,var3只是我在代码中显示的内容,那么我应该使用数组吗?简单地写var1 = True,var2 = True,var3 = True将是更少的行。 - Alex 8月28日7:39

就像下面的@Patrick Honorez所说,它是你变量的副本,而不是参考。在这种情况下,不需要进行数组或循环。这是一个简单的案例,你可以像上面写的那样处理。 - Teamothy 8月28日7:46

并且不可能将它们作为阵列中的参考? - Alex 8月28日7:57

我不是百分百肯定,而是不是。而不是数组try scripting.dictionary对象。也许它会帮助你改进/进一步使用这个主题:) stackoverflow.com/questions/17453272/ - Teamothy 8月28日8:04

感谢所有的帮助,我会读到这一点。 - Alex 8月28日8:05

+40

当您执行 arrTest = Array(var1,var2,var3)时,将变量的值复制到arrTest中。您不创建对这些变量的引用。

由于arrTest在Test()中声明,因此其范围仅限于Test()。

如果在模块级别声明arrTest,则可以从Test2检查arrTest值。但无论如何,他们将完全独立于varx。

如果我们谈论 Objects ,行为会有所不同。当我们写 Set x = obj1 时,我们创建一个引用,在这种情况下,obj1的变化将在x中可见。

+20

arrTest Test 子的局部变量变量。此变量在其中包含一些公共布尔值,通过ByVal 如果数组是在Subs本身之外声明的,那么它可以从任何地方访问,完全按照预期的方式访问:

  Option Explicit Option Base 0 Dim arrTest()As Variant Sub Test() Dim i arrTest = Array(False,False,False)For each i in arrTest Debug.Print i Next for i = LBound(arrTest)To UBound(arrTest)arrTest(i)= True Next for Each i in arrTest Debug。打印i Next Test2 End Sub Sub Test2()Debug.Print arrTest(LBound(arrTest))'或arrTest(0)End Sub   

如果需要在数组中使用变量并将它们作为参考传递,而不是作为副本,VBA中的OOP可能有所帮助。创建一个类“Container”,持有一个属性 SomeValue ,封装在 valueKept 中。创建 Class 就像在VBA中创建 Module 一样:

 <代码>
     
			
        

但是在数组中使用变量(作为参考而不是副本)是不可能的? - Alex 8月28日8:04

@Alex - VBA可以做任何事情,只需要解决一些问题。 - Vityata 8月28日8:19

我没有对Container对象做过任何事情,所以我必须熟悉它,但在某种程度上这更好,因为我会学到一些新东西。谢谢! - Alex 8月28日11:40

@Alex - Container只是类的名称,它不是真正的Container。它可以改为其他任何东西。 - Vityata 8月28日16:29

12
votes
answers
64 views
+10

Java流:计算基元数组中的不同值

为什么int数组的非重复计数返回的结果与Integer数组的计数结果不同?在这两种情况下我都期望得到3的结果。

  int [] numbers1 = {1,2,3}; System.out.println(“numbers1:”+ Arrays.toString(numbers1)); System.out.println(“distinct numbers1 count:”+ Stream.of(numbers1).distinct()。count()); 整数[] number2 = {1,2,3}; System.out.println(“numbers2:”+ Arrays.toString(numbers2)); System.out.println(“distinct numbers2 count:”+ Stream.of(numbers2).distinct()。count());   

结果

  numbers1:[1,2,3] distinct numbers1 count:1 numbers2:[1,2,3] distinct numbers2 count:3  
    
        
沙发
+20
+50

因为在第一个 Stream.of 方法中将整个数组视为一个元素 - 它创建一个带有数组元素的流。要使用基元数组,您必须使用 Arrays.stream

I’d use Arrays.stream to stream over an existing array in general. Then, you don’t have think about it anymore. The factory methods in the Stream class are for the varargs use case, i.e. when you use Stream.of(a), Stream.of(a, b), or Stream.of(a, b, c), etc., you also don’t need to think about the fact that there’s a specialized version for one of these calls - Holger yesterday

+60

在第一种情况下, Stream.of(numbers1)的类型是 Stream&lt; int []&gt; ,它只有一个值。

在第二种情况下, Stream.of(numbers2)的类型是 Stream&lt; Integer&gt; ,它有3个不同的值。< / p>

您使用 IntStream.of(1,2,3)来获取原始 int 的流。

+20

第一个 Stream.of 返回 Stream&lt; int []&gt; ,你有1个不同的 int [] ,名为<代码> numbers1 第二个 Stream.of 返回 Stream&lt; Integer&gt; ,你有3个不同的 Integers ,它们是 1 2 3 您可以通过将 Stream.of 替换为 Arrays.stream 来解决这个问题,以便第一次调用 Stream.of ,作为 Arrays 有一个专门的实用程序方法,它接受 int [] 并返回 IntStream

+20

Streams提供两个静态 Stream&lt; T&gt; of()方法:

  public static&lt; T&gt; 流&LT; T&GT; of(T t){..}   

  public static&lt; T&gt; 流&LT; T&GT; of(T ... values){..}   

第一种方法创建一个由单个对象组成的流,该对象作为参数提供,而第二种方法创建一个由数组元素。
在你的情况下, int [] 参数使(T values) Integer [] 时被调用参数使 of(T ... values)被调用。
预期的结果是 1 <
/ code>然后 3

为什么编译器不将两个调用绑定到()方法的

因为当传递的参数的声明类型是一个对象数组时,编译器会选择最具体的方法: of(T ... values)
但是,当传递的参数的声明类型是基元数组时,该方法不匹配: int 不是 Object
因此编译器可以选择的其余方法是(T t)

长话短说:要流式化基元数组,不要使用 Stream.of(),而是使用专门的类: IntStream.of() 或者为...设计的 DoubleStream.of()

0

  Stream.of(numbers1)  

with

  Arrays.stream(numbers1)  

int [] 正确转换为 IntStream ,而不是 Stream&lt; int []&gt;

0
votes
answers
75 views
+10

數組設置拋出啓動時出現錯誤 - CS0021錯誤(C#)

0

我想通過創建一個小程序來練習創建數組,該程序允許用戶輸入數組中的元素數量,然後創建一個數組用戶輸入的元素,並用數字填充所有元素。例如:如果輸入3,則會生成3個元素,將元素1填入數字1,數字2填入數字2,依此類推。雖然我每次都得到一個特定的錯誤:CS0021無法應用與[]的索引類型爲 這裏的「法團」的表達是我的代碼:數組設置拋出啓動時出現錯誤 - CS0021錯誤(C#)

 static void Main(string[] args) 
    { 
     int num; 
     string getNum; 
     getNum = Console.ReadLine(); 
     num = Int32.Parse(getNum); 
     int[] array = new int[num]; 
     Console.WriteLine("Array created with {0} elements.",num); 
    } 
    static void Array(int input) 
    { 
     int num = 1; 
     int inum = input; 
     while(inum >= input) 
     { 
      Array[inum] = num; 
      Console.WriteLine("{0}",input); 
      Console.WriteLine("{0}", num); 
      inum = inum - 1; 
      num = num + 1; 
     } 

感謝提前,如果你決定要幫我出:)

+1

'Array'已解析爲方法的名稱'void Array(int input)'。你想做什麼?你的方法'Array'沒有任何數組可用。 – InBetween

+0

嗯,我剛剛意識到我不應該問。被mindboggled很長一段時間,它錯誤,因爲我聲明數組和使用數組? (注意上限) 編輯:不,它不是,那不是原因。 – ImNotCrazy

+0

另外,我想要做的是我試圖給它的數字元素。 int [] array = new int [num];使用特定數量的元素聲明一個數組...並且array [inum] = num;應該給這些元素數字。 :/ – ImNotCrazy

沙发
0
0

在你的prgoram Array是一種方法。

因此行Array[inum] = num出錯,因爲Array是一種方法,您不能將索引器([])應用於方法。

最快捷的方式來實現你想要的東西類似下面的內容:

static int[] Array(int input) // Change return type to return an array of integers 
{ 
    var result = new int[input]; // Declare a local variable to hold a new array of size input. 

    // Change while to basic for loop 
    for (int i = 0; i < input; i++) 
    { 
     result[inum] = i + 1; // set elements of the result array. 
     Console.WriteLine("{0}",input); 
     Console.WriteLine("{0}", i); 
    } 
} 

在main方法:

static void Main(string[] args) 
{ 
    int num; 
    string getNum; 
    getNum = Console.ReadLine(); 
    num = Int32.Parse(getNum); 
    int[] array = Array(num); // Change this to call the Arrra(int num) method 
    Console.WriteLine("Array created with {0} elements.",num); 
} 

否則你可以使用一個簡單的LINQ聲明:

Enumerable.Range(1, input).ToArray(); 
+0

謝謝,從Array更改爲CreateArray的方法,它的工作!非常感謝! – ImNotCrazy

板凳
0
0

好的,讓我們稍微整理一下你的代碼,並儘量讓它做你想做的事:

讓我們從你的任何邏輯開始,從你的方法Main,並寫出具體的方法,採取小步驟實現你的目標。請記住,你製作方法越小,你就越難找到一個bug。如果你正在學習,開始荒謬的小事,隨着你的信心增長變得更大。

好的,有一個要求用戶輸入數字的概念,讓我們編寫一個方法來實現這一點,並儘可能在過程中儘可能強健。請記住,用戶是愚蠢的!要求一個號碼,他們會輸入什麼,但:

public static int PromptUserForPositiveInteger(string prompt) 
{ 
    int number; 
    Console.Write(prompt); 
    var input = Console.ReadLine(); 

    while (!int.TryParse(input, out number) || 
      number < 0) 
    { 
     Console.Write("Input is not a valid number, try again: "); 
     input = Console.ReadLine(); 
    } 

    return number; 
} 

好了,這是什麼方法做的是問一個正整數的用戶,並且將繼續這樣做,直到用戶管理輸入有效編號或拔插頭。無論哪種方式,我們都很安全。 int.TryParse是從string中提取int的安全方式;如果有可能這樣做,它會給你一個號碼並返回true,否則會返回false。如果它失敗了,它不會做的就是炸燬你的臉,這是int.Parse非常樂意去做的事情。避免Parse喜歡瘟疫,總是使用frendlier TryParse

另外值得一提的是,這種方法是一個實現細節,所以它的private。沒有人需要使用它,所以不要顯示它。

另請注意,我們可以概括這使得調用者指定如何提示用戶。沒有理由爲什麼你只想將這種方法限制在數組大小上,也許明天你需要的數量是你要給猴子喂的香蕉!每當它便宜又容易時,推廣你的代碼。每當泛化很難,不要,你可能不會需要它和它的浪費的努力。

現在,我們需要的下一個任務是製作一個int數組並填充它的值。該值將是每個數組元素的索引。哦,但是等一下,我們說我們會爲每項任務制定一個方法,不管它多麼荒謬!是的,我知道,但荒謬的是,小到目前爲止。

private static int[] CreatArrayAndSetValuesToIndex(int size) 
{ 
    Debug.Assert(size >= 0); 
    var array = new int[size]; 

    for (var i = 0; i < size; i++) 
    { 
     array[i] = i; 
    } 

    return array; 
} 

CreatArrayAndSetValuesToIndex似乎荒謬長的名字,但它會告訴你什麼方法呢。習慣使用描述性名稱並避免縮寫。現在使用intellisense,使用簡短的神祕名字是沒有意義的。

另請注意參數驗證。我永遠不會強調這一點:總是驗證您的方法輸入!。如果事情在某些條件下不應該起作用,那麼確保你正在盡一切可能來避免這些情況。由於該方法是私人的,Debug.Assert就足夠了。如果它是公共表面的一部分,你需要拋出一個適當的例外(ArgumentOutOfRange作爲一個合適的例子)。

最後但並非最不重要的,讓我們寫自己,打印出int陣列,這樣我們可以確保我們的代碼是運作良好的最後一個方法:

private static void PrintOut(int[] array) 
{ 
    Console.WriteLine(string.Join(Environment.NewLine, array); 
} 

我已經採取了這裏利用了已有的工具該框架。 string.Join是一個非常漂亮的小方法,它接受任何可枚舉對象(數組就是其中之一),並使用給定的分隔符創建其所有成員的字符串,在這種情況下爲新行。

而現在,所有這就是左邊是把他們放在一起:

static void Main(string[] args) 
{ 
    var size = PromptUserForPositiveInteger("Enter array size: "); 
    var array = CreatArrayAndSetValuesToIndex(size); 
    PrintOutArray(array); 
    Console.ReadLine(); 
} 

,我們就大功告成了!

0
votes
answers
71 views
+10

過濾JSON陣列使所有MAX值在JavaScript

-3

這是原始數組,過濾JSON陣列使所有MAX值在JavaScript

var dates = 
[ { user_id: '1', week_number: '2', amount: '100' }, 
    { user_id: '1', week_number: '2', amount: '100' }, 
    { user_id: '1', week_number: '2', amount: '100' }, 
    { user_id: '1', week_number: '3', amount: '100' }, 
    { user_id: '3', week_number: '3', amount: '100' } ] 

更新

首先,我試圖排序最高week_number值陣列:

var x = dates.sort(function (itemA, itemB) { 
    return itemA.week_number < itemB.week_number; 
    }); 

得到:

[ { user_id: '1', week_number: '3', amount: '100' }, 
    { user_id: '3', week_number: '3', amount: '100' }, 
    { user_id: '1', week_number: '2', amount: '100' }, 
    { user_id: '1', week_number: '2', amount: '100' }, 
    { user_id: '1', week_number: '2', amount: '100' } ] 

,然後use.filter得到

[ { user_id: '1', week_number: '3', amount: '100' }, 
    { user_id: '3', week_number: '3', amount: '100' },] 

後來我發現reduce方法,但它只返回最高week_number值的對象。

var max = dates.reduce(function(prev, current) { 
    return (prev.week_number > current.week_number) ? prev : current 
    }) 

正如你所見,.filter將完成工作。

非常感謝您提供的所有答案。你是最棒的!!!

+0

比它應該表現出數組對象包含' '4'' –

+0

我的意思是,如果只有一個項目'WEEK_NUMBER:' 4''和多個'WEEK_NUMBER:「3 ''? – RomanPerekhrest

+0

如果你可以保證列表是'week_number'排序,那麼你所需要做的就是在最後開始一個循環,並在'week_number'中斷時包含'week_number:'max'' –

沙发
0
1

使用map方法來獲取所有的week_number。獲得此數組中最大的,現在在filter方法使用該最大值得到匹配對象

var dates = [{ 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '4', 
 
    week_number: '4', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '3', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '3', 
 
    week_number: '3', 
 
    amount: '100' 
 
    } 
 
] 
 

 
var o = dates.map(function(item) { 
 
    return +item.week_number; 
 
}).sort(function(a, b) { 
 
    return a - b 
 
})[dates.length - 1] 
 
console.log(o) 
 
var m = dates.filter(function(elem) { 
 
    return elem.week_number === o.toString(); 
 
}) 
 
console.log(m)

EDIT

在上面的代碼中的地圖功能冗餘的,排序的日期將給予最大WEEK_NUMBER的對象,那麼濾波器可用於獲得所需的結果

var dates = [{ 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '4', 
 
    week_number: '4', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '2', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '1', 
 
    week_number: '3', 
 
    amount: '100' 
 
    }, 
 
    { 
 
    user_id: '3', 
 
    week_number: '3', 
 
    amount: '100' 
 
    } 
 
] 
 

 
var o = dates.sort(function(a, b) { 
 
    return a.week_number - b.week_number 
 
})[dates.length - 1] 
 

 
var m = dates.filter(function(elem) { 
 
    return elem.week_number === o.week_number; 
 
}) 
 
console.log(m)

+0

是的!非常感謝:] –

+0

如果在數組中間有'{user_id:'4',week_number:'4',amount:'100'}',那麼這將不起作用 – RomanPerekhrest

+0

爲什麼'.map()'? OP的原始'.reduce()'會更好(有些修復)。如果你可以假定最大的'week_number'在最後,'.map()'是完全多餘的,因爲你可以做'var o = dates [dates.length-1] .week_number' – 2017-11-11 16:49:49

板凳
0
1

您可以通過檢查week_number來使用單循環方法,並在必要時替換結果集。

var dates = [{ user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '3', amount: '100' }, { user_id: '3', week_number: '3', amount: '100' }], 
 
    result = dates.reduce(function (r, o, i) { 
 
     return !i || r[0].week_number < o.week_number 
 
      ? [o] 
 
      : r[0].week_number === o.week_number 
 
       ? r.concat(o) 
 
       : r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

如果會有'{user_id:'4',week_number:'4',amount:'100'}'作爲最後一項 – RomanPerekhrest

+0

@RomanPerekhrest,那麼這是行不通的,對,我認爲id應該得到尊重。無論如何, –

+0

似乎OP不考慮任何其他方法 – RomanPerekhrest

地板
0
0

reduce可能不是此任務的最佳工具。相反,循環式的解決方案可能是更好:

var maxWeek = 0; 
var max = []; 
dates.forEach(function(date) { 
    const week = date.week_number; 
    if (week > maxWeek) { 
     maxWeek = week; 
     max = [date]; 
    } 
    else if (week === maxWeek) { 
     max.push(date); 
    } 
}); 

注:我沒有測試此代碼,所以我不能保證沒有錯誤的。

4楼
0
0

隨着Array.sort()功能:

的第一個示例用額外的項目擴展:

var dates = [{ user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '3', amount: '100' }, { user_id: '3', week_number: '3', amount: '100' }, { user_id: '4', week_number: '4', amount: '100' }], 
 
    result = []; 
 

 
dates.sort(function(a, b){ return +b.week_number - +a.week_number; }); 
 
result.push(dates[0]); 
 
for (var i=2, len = dates.length; i<=len; i++) { 
 
    if (dates[i].week_number != result[0].week_number) break; 
 
    result.push(dates[i]); 
 
} 
 
console.log(result);

5楼
0
0
var res = [], prev, max; 
for (var i = 0, len = dates.length; i < len; i++) { 
    max = parseInt(dates[i].week_number); 
    if (!res.length) { 
    prev = max; res.push(dates[i]); 
    } else if (prev === max) { 
    res.push(dates[i]); 
    } else if (max > prev) { 
    prev = max; res.length = 0; res.push(dates[i]); 
    } 
} 
6楼
0
0

鑑於名單上week_number排序,它只是一個簡單的反向循環。

var dates = [{ user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '3', amount: '100' }, { user_id: '3', week_number: '3', amount: '100' }]; 
 

 
var i = dates.length; 
 
var last = dates[--i]; 
 
while (--i !== -1 && dates[i].week_number === last.week_number) { 
 
} 
 

 
var res = dates.slice(i+1); 
 
console.log(res);


或者使用??,雖然你沒有得到制止環。

var dates = [{ user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '3', amount: '100' }, { user_id: '3', week_number: '3', amount: '100' }]; 
 

 
var res = dates.reduceRight((a, obj) => 
 
    a.length && obj.week_number !== a[a.length-1].week_number ? a : [obj, ...a] 
 
, []); 
 

 
console.log(res);


但是,如果你不能依賴列表的排序順序,那麼你應該使用.reduce()你已經寫了,並在.filter()使用它的結果操作。

var dates = [{ user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '2', amount: '100' }, { user_id: '1', week_number: '3', amount: '100' }, { user_id: '3', week_number: '3', amount: '100' }]; 
 
    
 
var max = dates.reduce((p, c) => +p.week_number > +c.week_number ? p : c).week_number; 
 
var res = dates.filter(d => d.week_number == max) 
 

 
console.log(res);

0
votes
answers
64 views
+10

將PHP數組轉換爲可用變量

0

嘗試將我的數組值變爲可用變量。我想將這些值輸出爲可讀的內容,以便我可以在SELECT調用中使用它們以獲取我的下一個語句。最終結果我希望能夠做到像echo $ numresults這樣的東西,應該看起來像這樣9,8,6我的代碼如下所示將使用print_r,如下所示。將PHP數組轉換爲可用變量

Array ([0] => 9) Array ([0] => 8) Array ([0] => 6) 

我覺得我很接近但不知道如何將這個數組變成一個可用的變量。

while ($rowa = mysql_fetch_assoc($resulta)) { 
    if ($rowa['Count'] > 0) { 
     $cids[]= $rowa['id']; 
     display_id($rowa['id'], $levela + 1); 
    } elseif ($rowa['Count']==0) { 
     $cids[]= $rowa['id']; 
    } 

} 
print_r($cids); 
+0

讓我知道,如果你需要我的回答 –

+0

幫助使用RTRIM,SUBSTR當兩者都是非常接近但($字符串,0,-1); mb_substr($ string,0,-1);函數刪除最後一個,在輸出它將刪除所有的逗號,並把輸出從9,8,6,到986 –

沙发
0
1
$cids = ""; 

while ($rowa = mysql_fetch_assoc($resulta)) { 
    if ($rowa['Count'] > 0) { 
     $cids = $cids . $rowa['id'] . ","; 
     display_id($rowa['id'], $levela + 1); 
    } elseif ($rowa['Count']==0) { 
     $cids = $rowa['id']; 
    } 
} 

print_r($cids); 
+0

但是,當使用rtrim,substr($ string,0,-1); mb_substr($ string,0,-1);函數刪除最後一個,在輸出時它將刪除所有的逗號,並將輸出從9,8,6到986, –

+0

修正它只是改爲$ cids。「,」。 $ ROWA [ 'ID'];來自$ cids。 $ rowa ['id']。 「」;現在工作很完美 –

0
votes
answers
59 views
+10

如何在Python中從2個numpy數組中提取緯度/經度座標?

0

我基本上有2個數組,其中一個包含Lattitude值,一個Longitude。我想要的是提取符合特定要求的那些。如何在Python中從2個numpy數組中提取緯度/經度座標?

xLong = np.extract(abs(Long-requirement)<0.005,Long) 
xLat = np.extract(abs(Lat-requirement)<0.005,Lat) 

Lat和Long是numpy數組。

但是,我只想得到那些經緯度都符合要求的座標,我不知道該怎麼做。

如果可能,我需要使用numpy函數,因爲我也在尋找優化。我知道我可以遍歷所有使用的for,只需添加到不同的數組,但這將花費很多時間

沙发
0
1

您需要使用boolean indexing.執行此操作無論何時創建布爾數組的形狀與感興趣數組的形狀相同,您可以通過使用布爾數組索引來獲取True值。我在下面假設LongLat是相同的大小;如果他們不是這個代碼會拋出一個異常。

# start building the boolean array. long_ok and lat_ok will be the same 
# shape as xLong and xLat. 
long_ok = np.abs(Long - requirement) < 0.005 
lat_ok = np.abs(Lat - requirement) < 0.005 

# both_ok is still a boolean array which is True only where 
# long and lat are both in the region of interest 
both_ok = long_ok & lat_ok 

# now actually index into the original arrays. 
long_final = Long[both_ok] 
lat_final = Lat[both_ok] 
+1

是的,它們的大小相同。謝謝你的回答,代碼很好 – Barkz

0
votes
answers
60 views
+10

減去許多陣列

0

我有一個很大的陣列大約這樣50個值(例如我使用較小的陣列):減去許多陣列

Array 
(
    [Adam Ma?ysz] => 1 
    [Justyna Kowalczyk] => 2 
    [Janne Ahonen] => 3 
    [Stefan Hula] => 4 
    [Ole Einar Bjoerdalen] => 5 
    [Jakub Janda] => 6 
    [Mariusz Pudzianowski] => 7 
    [Harry Potter] => 8 
    [Vladimir Zografski] => 9 
    [Pavel Karelin] => 10 
    [Eddie Edwards] => 11 
    [Apoloniusz Tajner] => 12 
) 

和我有Ñ較小具有不同值的常數數組:

Array 
(
    [Adam Ma?ysz] => 1 
    [Janne Ahonen] => 2 
    [Stefan Hula] => 3 
    [Ole Einar Bjoerdalen] => 4 
    [Vladimir Zografski] => 5 
    [Pavel Karelin] => 6 
    [Apoloniusz Tajner] => 7 
    [Mariusz Pudzianowski] => 8 
    [Jakub Janda] => 9 
    [Harry Potter] => 10 
) 
Array 
(
    [Justyna Kowalczyk] => 1 
    [Apoloniusz Tajner] => 2 
    [Harry Potter] => 3 
    [Janne Ahonen] => 4 
    [Mariusz Pudzianowski] => 5 
    [Adam Ma?ysz] => 6 
    [Jakub Janda] => 7 
    [Ole Einar Bjoerdalen] => 8 
    [Vladimir Zografski] => 9 
    [Pavel Karelin] => 10 
) 
Array 
(
    [Adam Ma?ysz] => 1 
    [Janne Ahonen] => 2 
    [Jakub Janda] => 3 
    [Stefan Hula] => 4 
    [Ole Einar Bjoerdalen] => 5 
    [Justyna Kowalczyk] => 6 
    [Harry Potter] => 7 
    [Mariusz Pudzianowski] => 8 
    [Vladimir Zografski] => 9 
    [Apoloniusz Tajner] => 10 
) 

所以我想減去數組值是在哪裏是相同的密鑰,如:

Big Array: [哈利波特] => 8
[馬里斯斯·普祖亞諾斯基] => 7

小陣列#1:[哈利波特] => 10
[馬里斯斯·普祖亞諾斯基] => 8
小型陣列#2:[哈里波特] => 3
[馬里斯斯·普祖亞諾斯基] => 5

輸出:小型陣列#1和大陣列之間的差異爲鍵[哈利 波特] = 2
小陣列#1和大陣之間 差分鍵[Mariusz Pudzianowski] = 1

輸出:小型陣列#2 和Big陣鍵[哈利波特] =小陣列#2和大陣列之間5
差分對鍵之間2

基本上我差[馬里斯斯·普祖亞諾斯基] =卡住了。 請幫忙。

+0

這是不是很清楚你想達到什麼。請你能解釋一下你的例子。 –

沙发
0
0

可以將您的大數組命名爲$ bigArray和small array作爲$ smallArray,它們都具有鍵值對。現在代碼應該是:

foreach($bigArray as $bigKey=>$bigValue){ 
    foreach($smallArray as $smallKey=>$smallValue){ 
     if($smallKey==$bigKey){ 
      $output=$bigValue-$smallValue; 
      echo 'Difference between Small Array #1 and Big Array for $bigKey is '.$output; 
     } 
    } 
} 

這樣你的大陣,你會循環小數組的每個元素,並檢查密鑰匹配,如果他們那麼你減去它們的值,並打印出來。你也可以爲其他小陣列做這個。

板凳
0
0

您可以使用array_intersect_key來查找所有陣列通用的所有密鑰。

$commonKeys = array_intersect_key($bigArray, $smallArray1, $smallArray2, ...) 

從那裏你只需要遍歷$ commonKeys並進行相應的替代。例如:

foreach ($commonKeys as $key) { 
    $result = abs($bigArray[$key] - $smallArray1[$key]); 
    echo " Difference between Small Array #1 and Big Array for key [$key] = $result"; 
    //you do that for each Small Array 
} 
0
votes
answers
38 views
+10

爲什麼作爲輸入參數傳遞給函數的二維數組無法在函數聲明中聲明爲int **?

2

如果假設我有兩個陣列arr一維數組和brr的2D陣列,我想這些數組作爲輸入傳遞到功能爲什麼作爲輸入參數傳遞給函數的二維數組無法在函數聲明中聲明爲int **?

在一維的情況下:

void fun(int*); OR void fun(int[]); //both declarations are allowed

fun(arr);//call for 1D 

void fun(int *ptr) 
{ 
//function def of 1D 
} 

但在2D陣列的情況下:

void fun(int[][]); //allowed 
void fun(int**); //this is not allowed **WHY so?** 

雖然呼叫和定義類似於前述一維數組

fun(brr);//call 

void fun(int **ptr2) 
{ 
//code 
} 
+2

[數組的數組是*不*相同作爲指針(或指針數組)的指針](https://stackoverflow.com/a/18440456/440558)。 –

+0

相關,如果不是dupe:https://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer –

沙发
0
1

這是因爲通過常規的指針陣列被認爲是合格的指針類型的在很多場合的第一個元素特別是對功能傳遞的參數。

可以諮詢ISO/IEC 9899:2011§6.7.6.3功能說明符(包括原型) - 語義

一個參數的聲明爲 '' 類型的陣列 ''應該調整爲 ''限定類型爲''的指針,其中類型限定符(如果有的話)是 在數組類型派生的[和]中指定的指針。如果 關鍵字static也出現在數組類型 推導的[和]中,則對於函數的每次調用,相應實際參數的值應提供對數組中第一個 元素的訪問,由 大小表達式指定的許多元素。

但是int[][]代替int**類型的聲明是不能互換的,因爲在第一指的是2D陣列,它會被編譯器默默改變爲指針二維數組的第一元素,所述第二種意思是指向int指針的指針,它與2D數組不兼容。

有時人在混亂通過動態定義的僞二維陣列誘導如下:

int **My_2D_array = malloc(sizeof(int *) * 2); //We are allocating 2 pointers to int 
My_2D_array[0] = malloc(sizeof(int)*2); //We allocate the first dimension space 
My_2D_array[1] = malloc(sizeof(int)*2); //We allocate the second dimension space 

在這種情況下,名稱My_2D_array將被稱爲的2個指針的數組的第一個元素的爲int地址,並且使用[]運算符將返回指針數組中的第一個指針。再次將所述操作者[]到剛剛獲得的,並且再次用作INT的的單維陣列的第一元素的地址的指針,將returs一個int:

int my_int = My_2D_array[0][1]; //mimics a bidimensional array, but isn't! 
0
votes
answers
64 views
+10

CodeIgniter:如何在RESTful Server上接收序列化數組中的數據?

0

我想問,如何從CodeIgniter RESTful Server上的數組中的序列化數據接收數據?CodeIgniter:如何在RESTful Server上接收序列化數組中的數據?

阿賈克斯

$.ajax({ 
    type: 'POST', 
    url: "/mywebsite/api/index.php/purchase", 
    data: $("#formdatatrans").serialize(), 
    success: function(response) { 
     alert("Success"); 
    } 
}); 

HTML表單

<input type="text" name="data1[]"> 
<input type="text" name="data2[]"> 
<input type="text" name="data3[]"> 
<input type="text" name="data4[]"> 

控制器

function index_post() {  
$data = array(
      'data1'   => $this->post('data1'), 
      'data2'  => $this->post('data2'), 
      'data3'    => $this->post('data3'), 
      'data4' => $this->post('data4')); 
$insert = $this->db->insert('table1', $data); 
if ($insert) { 
$this->response($data, 200); 
} else { 
$this->response(array('status' => 'fail', 502)); 
}} 

輸入數據

Array [0] 
Data1 = abc_1 
Data2 = abc_1 
Data3 = abc_1 
Data4 = abc_1 

Array [1] 
Data1 = abc_2 
Data2 = abc_2 
Data3 = abc_2 
Data4 = abc_2 

如何使用/循環的同時,一次性添加所有的數據之上?

在此先感謝

沙发
0
0

您可以使用梅傑斯與梅傑斯你可以兩個數組轉換爲數組

<?php 
$array1 = array('Data1' =>"abc_1",'Data2' =>"abc_1",'Data3' =>"abc_1",'Data4' =>"abc_1"); 
$array2=array('Data5' =>"abc_2",'Data6' =>"abc_2",'Data7' =>"abc_2",'Data8' =>"abc_2"); 
$data = array_merge($array1, $array2); 
print_r($output); 
?> 
板凳
0
0

這個替換您的控制器和檢查,這將使用幫助您一次插入foreach循環。

function index_post() {  

    $data1 = $this->post('data1'); 
    $data2 = $this->post('data2'); 
    $data3 = $this->post('data3'); 
    $data4 = $this->post('data4'); 

    foreach ($data1 as $key=> $value) { 
     $data['data1'] = $data1[$key]; 
     $data['data2'] = $data2[$key]; 
     $data['data3'] = $data3[$key]; 
     $data['data4'] = $data4[$key]; 
     $insert = $this->db->insert('table1', $data); 
    } 

    if ($insert) { 
     $this->response($data, 200); 
    } else { 
     $this->response(array('status' => 'fail', 502)); 
    } 
} 
0
votes
answers
56 views
+10

從numpy圖像中提取彩色線條

2

我有一個以彩色曲線爲特徵的圖像。從numpy圖像中提取彩色線條

我想爲每一行提取曲線較高像素的索引。

此代碼的工作,但速度很慢(f的圖像,magic是線條顏色的RGB代碼):

res = f.shape[0] 
magic = 146, 47, 6 
return [min(l for l in range(res) if np.array_equal(magic, f[l, c, :3])) for c in range(res)] 

我如何做同樣的事情更快?

沙发
0
2

沿着每一行即最後一個軸與magic元素進行比較。這給了我們一個2D掩碼。

mask = (f == magic).all(-1) 

因爲,我們終於做min(l),這將意味着在遮片陣列找到第一個True的索引。所以,如果有至少一個保證的比賽,我們可以使用argmax獲得第一場比賽的指數,像這樣 -

(f == magic).all(-1).argmax(0) 
+0

argmax返回標所以這是行不通的。 – Labo

+0

我發現了一個技巧:'(f [:,:,:3] == magic).all(axis = -1).argmax(0)' – Labo

+0

argmax需要的第一個索引是true,所以它返回如預期的那樣! – Labo